{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 题记"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "今年2月的时候开始学习台大林轩田老师的机器学习课程，感觉讲的非常好，课程的参考教材是**learning from data**，网上查阅资料的时候发现关于这本书的笔记几乎没有，所以想自己做一个学习笔记，记录教材中的习题的解法，一来可以加深自己的理解，而来也可以给后来学习的小伙伴一些参考。\n",
    "这份笔记主要以**learning from data**的习题解析为主，笔记形式为Markdown以及Jupyter Notebook结合的形式。因为笔者水平有限，难免有些错误，欢迎指出。\n",
    "\n",
    "我的github地址：  \n",
    "https://github.com/Doraemonzzz\n",
    "\n",
    "个人主页：  \n",
    "http://doraemonzzz.com/\n",
    "\n",
    "\n",
    "参考资料:  \n",
    "https://blog.csdn.net/a1015553840/article/details/51085129  \n",
    "http://www.vynguyen.net/category/study/machine-learning/page/6/  \n",
    "http://book.caltech.edu/bookforum/index.php  \n",
    "http://beader.me/mlnotebook/\n",
    "\n",
    "下面进入正题，这一次讨论第一章的讨论题和课后习题。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Chapter 1 The Learning Problem"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Part 1:Exercise"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 1.1 (Page 4)\n",
    "Express each of the following tasks in the framework of learning from data by specifying the input space $X$, output space $Y$, target function $f: X \\to Y$.and the specifics of the data set that we will learn from.  \n",
    "\n",
    "(a) Medical diagnosis: A patient walks in with a medical history and some symptoms, and you want to identify the problem.  \n",
    "(b) Handwritten digit recognition (for example postal zip code recognition for mail sorting) .  \n",
    "(c) Determining if an email is spam or not.  \n",
    "(d) Predicting how an electric load varies with price, temperature, and day of the week.  \n",
    "(e) A problem of interest to you for which there is no analytic solution,but you have data from which to construct an empirical solution "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这题考察了对learning from data框架的理解,框架可以参考课本第4页。\n",
    "\n",
    "标识 |输入空间 |输出空间|目标函数\n",
    "---|---|---|---\n",
    "a|病史，症状|是否患病|判别函数(医疗资料至是否患病的映射)\n",
    "b|手写数字|判别出来的数字|判别函数(手写数字至数字的映射)\n",
    "c|邮件内容|是否为垃圾邮件|判别函数(邮件内容至是否为垃圾邮件的映射)\n",
    "d|电力负载量，电力价格，温度，日期|电量的预测|预测函数\n",
    "e|数据|处理结果|经验解决方案(empirical solution)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 1.2 (Page 6)\n",
    "Suppose that we use a perceptron to detect spam messages. Let's say that each email message is represented by the frequency of occurrence of\n",
    "keywords, and the output is if the message is considered spam.  \n",
    "\n",
    "(a) Can you think of some keywords that will end up with a large positive weight in the perceptron?  \n",
    "(b) How about keywords that will get a negative weight?  \n",
    "(c) What parameter in the perceptron directly affects how many borderline messages end up being classified as spam?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这题考察了感知机的一些概念。\n",
    "\n",
    "(a) 哪些关键字在感知机的模型中有较大权重？\n",
    "免费，打折，钱等\n",
    "\n",
    "(b) 哪些关键字在感知机的模型中有负的权重？\n",
    "显然是和垃圾邮件无关的，例如工作，开会，作业等\n",
    "\n",
    "(c) 感知机中哪些参数直接影响了边界信息最终被分类为垃圾邮件?\n",
    "这里回顾下感知机模型:\n",
    "$$\n",
    "h(x)=sign((\\sum_{i=1}^{d}w_ix_i)+b)\n",
    "$$\n",
    "所以这里直接影响的参数为$w_i(i=1,2...d)$以及$b$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 1.3 (Page 8)\n",
    "The weight update rule in (1.3) has the nice interpretation that it moves in the direction of classifying x(t) correctly.  \n",
    "\n",
    "(a) Show that $y(t)w^T(t)x(t) < 0$. [Hint: $x(t)$ is misclassifed by $w(t)$.]  \n",
    "(b) Show that $y(t)w^T(t+1)x(t) > y(t)w^T(t)x(t)$. [Hint: Use (1.3).]  \n",
    "(c) As far as classifying $x(t)$ is concerned, argue that the move from $w(t)$ to $w(t + 1)$ is a move 'in the right direction ' . "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这里先对之前的感知机模型稍作变形，令$w_0=b,x_0=1$，那么\n",
    "$$\n",
    "h(x)=sign((\\sum_{i=1}^{d}w_ix_i)+b)\n",
    "$$\n",
    "可以变形为:\n",
    "$$ \n",
    "h(x)=sign((\\sum_{i=0}^{d}w_ix_i))=sign(w^T(t)x(t))\n",
    "$$\n",
    "接着给出式(1.3)\n",
    "$$\n",
    "对于y(t)\\ne\n",
    "sign(w^T(t)x(t))的数据, 更新规则是\n",
    "w(t + 1) = w(t) + y(t)x(t) \n",
    "$$\n",
    "\n",
    "(a) 因为$y(t)\\ne sign(w^T(t)x(t))$，所以当$sign(w^T(t)x(t))>0 $时，$y(t)=-1$，\n",
    "当$sign(w^T(t)x(t))<0 $时，$y(t)=1$，所以$y(t)w^T(t)x(t) < 0$  \n",
    "\n",
    "(b)\n",
    "$$\n",
    "y(t)w^T(t+1)x(t)=y(t)(w(t) + y(t)x(t))x(t)=y(t)w^T(t)x(t)+y^2(t)x^T(t)x(t)\n",
    "$$\n",
    "注意$x(t)$的第一个分量为$1$(参考课本)，所以$y^2(t)x^T(t)x(t)>0$，因此\n",
    "$$\n",
    "y(t)w^T(t+1)x(t)>y(t)w^T(t)x(t)\n",
    "$$\n",
    "\n",
    "(c) 由(1)我们知道，如果分类错误，那么$y(t)w^T(t)x(t) < 0$，但利用(1.3)跟新之后，$y(t)w^T(t+1)x(t)>y(t)w^T(t)x(t)$，也就是向着正方向前进了，所以如果资料是可分的，那么经过有限步之后得到$w$,可以使得所有的$x$,$yw^Tx>0$ "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 1.4 (Page 8)\n",
    "Let us create our own target function $f$ and data set $D$ and see how the perceptron learning algorithm works. Take d = 2 so you can visualize the problem, and choose a random line in the plane as your target function,where one side of the line maps to 1 and the other maps to -1. Choose the inputs $X_n$ of the data set as random points in the plane, and evaluate the target function on each $X_n$ to get the corresponding output $Y_n$.  \n",
    "Now, generate a data set of size 20. Try the perceptron learning algorithm on your data set and see how long it takes to converge and how well the final hypothesis g matches your target $f$. You can find other ways to play with this experiment in Problem 1.4."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这题是对感知机模型编程实现一下，这里使用了Python"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nGbEOSQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x12b27eef4a8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# -*- coding: utf-8 -*-\n",
    "import random\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus']=False #用来正常显示负号\n",
    "\n",
    "#首先生成20个可分的数据，为方便起见，分别生成10个第一象限的点和10个第三象限的点\n",
    "#第一象限10个点\n",
    "X1=[]\n",
    "Y1=[]\n",
    "#第三象限10个点\n",
    "X2=[]\n",
    "Y2=[]\n",
    "for i in range(10):\n",
    "    X1.append(random.uniform(0,1))\n",
    "    Y1.append(random.uniform(0,1))\n",
    "    X2.append(random.uniform(-1,0))\n",
    "    Y2.append(random.uniform(-1,0))\n",
    "    \n",
    "#给数据打标记,第一象限的标记为1，第三象限的标记为-1,注意添加第一个分量为1\n",
    "data1=[np.array([1,X1[i],Y1[i],1]) for i in range(10)]\n",
    "data2=[np.array([1,X2[i],Y2[i],-1]) for i in range(10)]\n",
    "data=data1+data2\n",
    "\n",
    "#定义sign函数\n",
    "def sign(x):\n",
    "    if x>=0:\n",
    "        return 1\n",
    "    else:\n",
    "        return -1\n",
    "    \n",
    "#定义判别函数，判断所有数据是否分类完成\n",
    "def Judge(x,w):\n",
    "    flag=1\n",
    "    for i in x:\n",
    "        if sign(i[:3].dot(w))*i[-1]<0:\n",
    "            flag=0\n",
    "            break\n",
    "    return flag    \n",
    "\n",
    "#记录次数\n",
    "s=0\n",
    "#初始化w=[0,0]\n",
    "w=np.array([0,0,0],dtype=float)\n",
    "while (Judge(data,w)==0):\n",
    "    for i in data:\n",
    "        if sign(i[:3].dot(w))*i[-1]<0:\n",
    "            w+=i[-1]*i[:3]\n",
    "            s+=1\n",
    "            \n",
    "#直线方程为w0+w1*x+w2*y=0,根据此生成点\n",
    "X3=np.arange(-1,1,0.1)\n",
    "Y3=np.array([(X3[i]*w[1]+w[0])/(-w[2]) for i in range(len(X3))])\n",
    "\n",
    "#画出图片\n",
    "plt.scatter(X1,Y1,c='r')\n",
    "plt.scatter(X2,Y2,c='b')\n",
    "plt.plot(X3,Y3)\n",
    "plt.title(u\"经过\"+str(s)+u\"次迭代收敛\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 1.5 (Page 11)\n",
    "Which of the following problems are more suited for the learning approach and which are more suited for the design approach?  \n",
    "\n",
    "(a) Determining the age at which a particular medical test should be performed  \n",
    "(b) Classifying numbers into primes and non-primes  \n",
    "(c) Detecting potential fraud in credit card charges  \n",
    "(d) Determining the time it would take a falling object to hit the ground  \n",
    "(e) Determining the optimal cycle for traffic lights in a busy intersection"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "learning approach是指机器学习的方法，design approach是指推导的方法，适合能够直接分析推导的问题\n",
    "\n",
    "标识 |适合的方式\n",
    "---|---\n",
    "a|learning approach\n",
    "b|design approach\n",
    "c|learning approach\n",
    "d|design approach\n",
    "e|learning approach\n",
    "\n",
    "质数和自由落体问题可以直接得出结果，所以使用design approach"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 1.6 (Page 14)\n",
    "For each of the following tasks, identify which type of learning is involved (supervised, reinforcement, or unsupervised) and the training data to be used. If a task can fit more than one type, explain how and describe the training data for each type.  \n",
    "\n",
    "(a) Recommending a book to a user in an online bookstore  \n",
    "(b) Playing tic tac toe  \n",
    "(c) Categorizing movies into different types  \n",
    "(d) Learning to play music  \n",
    "(e) Credit limit: Deciding the maximum allowed debt for each bank customer"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a) 推荐系统的问题，监督学习  \n",
    "(b) 游戏输赢是确定的，所以是监督学习，然后学习的过程是强化学习  \n",
    "(c) 标准的分类问题，监督学习  \n",
    "(d) 学习音乐的结果没有直接标志，非监督学习，然后学习的过程是强化学习  \n",
    "(e) 标准的预测问题，监督学习  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 1.7 (Page 17)\n",
    "For each of the following learning scenarios in the above problem, evaluate the performance of $g$ on the three points in $X$ outside $D$. To measure the performance, compute how many of the 8 possible target functions agree with $g$ on all three points, on two of them, on one of them, and on none of them.  \n",
    "\n",
    "(a) $H$ has only two hypotheses, one that always returns ' $•$' and one that always returns '$o$'. The learning algorithm picks the hypothesis that matches the data set the most.  \n",
    "(b) The same $H$, but the learning algorithm now picks the hypothesis that matches the data set the least.  \n",
    "(c) $H = \\{XOR\\}$ (only one hypothesis which is always picked), where $XOR$ is defined by $XOR(x) = •$ if the number of $1$'s in x is odd and\n",
    "$XOR(x) = o$ if the num ber is even.  \n",
    "(d) $H$ contains all possible hypotheses (all Boolean functions on three variables), and the learning algorithm picks the hypothesis that agrees with all training examples, but otherwise disagrees the most with the $XOR$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![](https://github.com/Doraemonzzz/markdown-photo/blob/learning-from-data/C1E7.png?raw=true)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "先看下题目的背景，给定$5$组训练数据和结果，让我们预测其余$3$组数据的表现结果，现在假设在$5$组数据上全部正确，那么一共就有$2^3$种可能的函数，如上图所示。\n",
    "现在题目分别给出$4$种假设空间和学习算法，这样可以得到结果$g$,我们需要给出和$g$在$3$个点均一致，$2$个点一致，$1$个点一致的的函数。\n",
    "\n",
    "(a) 假设空间为全$o$以及全$•$，学习的算法是取和训练数据集符合程度最多的假设，显然全$•$在$5$组训练数据上有$3$组正确，全$o$只有$2$组正确，所以这里取全$•$  \n",
    "\n",
    "(b) 假设空间为全$o$以及全$•$，学习的算法是取和训练数据集符合程度最少的假设，所以这里取全$o$  \n",
    "\n",
    "(c) 这里的假设空间只有一个元素，有奇数个$1$则取$•$，否则取$o$  \n",
    "\n",
    "(d) 这里的假设空间是所有假设，学习算法是在训练数据上结果全部正确，但是在预测数据上和$XOR$不符合度最高的的假设，因此这里取和条件c结果完全相反的结果  \n",
    "\n",
    "x |条件a下的g|条件b下的g|条件c下的g|条件d下的g\n",
    "---|---|---|---|---|---\n",
    "$1 0 1$|$•$|$o$|$o$|$•$\n",
    "$1 1 0$|$•$|$o$|$o$|$•$\n",
    "$1 1 1$|$•$|$o$|$•$|$o$\n",
    "\n",
    "所以题目的答案如下:\n",
    "\n",
    "假设 |3个点相同的函数|2个点相同的函数|1个点相同的函数\n",
    "---|---|---|---\n",
    "a|$f_8$|$f_4,f_6,f_7$|$f_2,f_3,f_5$\n",
    "b|$f_1$|$f_2,f_3,f_5$|$f_4,f_6,f_7$\n",
    "c|$f_2$|$f_1,f_4,f_6$|$f_3,f_5,f_8$\n",
    "d|$f_7$|$f_3,f_5,f_8$|$f_1,f_4,f_6$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 1.8 (Page 19)\n",
    "*If µ = 0 .9, what is the probability that a sample of 10 marbles will have v$\\le$0.1? [Hints: 1. Use binomial distribution. 2. The answer is a very small number.]*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "二项分布的题目，盒子例一共有两种球，90%是红球，10%是绿球，现在取10个，问红球树小于等于1的概率。\n",
    "$$\n",
    "P=0.1^{10}+C^{1}_{10}\\times 0.1^{9}\\times 0.9 \\approx  9\\times 10^{-9}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 1.9 (Page 19)\n",
    "*If µ = 0 .9, use the Hoeffding Inequality to bound the probability that a sample of 10 marbles will have v$\\le$0.1 and compare the answer to the previous exercise.*"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "回顾下$Hoeffding$不等式:\n",
    "$$\n",
    "P[| \\mu-v|>\\epsilon]\\le 2e^{-2\\epsilon ^2N}\n",
    "$$\n",
    "因此\n",
    "$$\n",
    "P[v\\le 0.1]=P[0.9-v\\ge 0.8]=P[\\mu-v\\ge 0.8]\\le P[|\\mu-v|\\ge 0.8]\\le 2e^{-2\\times 0.8^2\\times 10}\\approx5.5215451440744015\\times 10^{-6}\n",
    "$$\n",
    "这个比习题1.8的上界更松，因为Hoeffding不等式是通用的，所以上界肯定会更宽松一些"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 1.10 (Page 23)\n",
    "Here is an experiment that illustrates the difference between a single bin and multiple bins. Run a computer simulation for flipping 1000 fair coins.Flip each coin independently times. Let's focus on 3 coins as fllows:  \n",
    "$c_1$ is the first coin flipped; $c_{rand}$ is a coin you choose at random; $c_{min}$ is the coin that had the minimum frequency of heads (pick the earlier one in case of a tie). Let $v_1 , v_{rand}$ and $v_{min}$ be the fraction of heads you obtain for the respective three coins.  \n",
    "\n",
    "(a) What is µ for the three coins selected?  \n",
    "(b) Repeat this entire experiment a large number of times (e.g. , 100, 000 runs of the entire experiment) to get several instances of $v_1 , v_{rand}$ and $v_{min}$ and plot the histograms of the distributions of $v_1 , v_{rand}$ and $v_{min}$. Notice that which coins end up being $c_{rand}$ and $c_{min}$ may differ from one run to another.  \n",
    "(c) Using (b), plot estimates for $P[|\\mu-v|>\\epsilon]$ as a function of $\\epsilon$, together with the Hoeffding bound $2e^{-2\\epsilon ^2N}$ (on the same graph) .  \n",
    "(d) Which coins obey the Hoeffding bound, and which ones do not? Explain why.  \n",
    "(e) Relate part (d) to the multiple bins in Figure 1.10"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "介绍下这题的背景,先定义几个概念:\n",
    "$$\n",
    "E_{in}(h)=(faction\\ of\\ D\\ where\\ f\\ and\\ h\\ disagree)\n",
    "\\\\ =\\frac 1N \\sum_{i=1}^{n}[\\![h(x_n)\\neq  f(x_n)]\\!],\n",
    "$$\n",
    "$$\n",
    "E_{out}(h)=P[\\![h(x)\\neq  f(x)]\\!]\n",
    "$$\n",
    "这里$f$是原假设,$h$是我们得到的假设，其次：\n",
    "$$\n",
    "[\\![statement]\\!]= 1\\ if\\ the\\ statement\\ is\\ true\n",
    "$$\n",
    "$$\n",
    "[\\![statement]\\!]= 0\\ if\\ the\\ statement \\ is\\ false\n",
    "$$\n",
    "$E_{in}(h)$就是我们得到的假设和目标假设在训练集上的误差，$E_{out}(h)$是实际误差，所以$E_{out}(h)$相当于$Hoeffding$不等式中的$\\mu$,$E_{in}(h)$相当于$Hoeffding$不等式中的$v$。\n",
    "因此：\n",
    "$$\n",
    "P[|E_{in}(h)-E_{out}(h）|>\\epsilon]\\le 2e^{-2\\epsilon ^2N}\n",
    "$$\n",
    "所以如果数据量够大，$E_{in}(h)$和$E_{out}(h)$的差距会越来越小。但之前的情况都是只有一个假设，如果只有一个假设，也就不需要学习了，所以这里考虑了一系列假设$H=\\{h_1,h_2,...,h_M\\}$，我们要从中挑选一个比较好的假设$g$。\n",
    "这题希望解释的就是我们不能得出:\n",
    "$$\n",
    "P[|E_{in}(g)-E_{out}(g)|>\\epsilon]\\le 2e^{-2\\epsilon ^2N}\n",
    "$$\n",
    "实际上我们只能得出:\n",
    "$$\n",
    "P[|E_{in}(g)-E_{out}(g)|>\\epsilon]\\le 2M e^{-2\\epsilon ^2N}\n",
    "$$\n",
    "更细节的部分可以参考书本。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "回到原题，$v_1,v_{rand},v_{min}$分别是第一个抛的硬币，随机抽取的硬币，抛十次之后得到正面数量最少的硬币（如果这样的硬币有多个，则取次序最前面的一个硬币）在十次投掷中正面的比例，$\\mu$是抛以上三种硬币得到正面的概率。  \n",
    "\n",
    "(a) 因为硬币是公平的，所以$\\mu=0.5$  \n",
    "\n",
    "(b) 首先根据题目要求模拟结果:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXsAAAEGCAYAAACEgjUUAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAFCVJREFUeJzt3X20XXV95/H3B0JmICCEcg3adpHS\nomir+HAHoUInTIFCwYehONiiLkXL2FHGmXG5CgWX4lRlnKnjI7axVBnpg490SZEFWKWkCIUbFWWq\nVKkBRNEgSAxji9Dv/LF34OTmPpx7yclJ7u/9Wuus7P3dD+e37839nN/5nb33SVUhSVradht3AyRJ\no2fYS1IDDHtJaoBhL0kNMOy1S0myIsnu426HtKsx7LXDJNktybI5li+bHuRJ/keS3x0ovRp4/3Zo\nS5IsH2K9ZUlm/TtJ8g9JDp1j+S8nefMcy1+d5KnzNlh6jAx7zSvJcUm+leSOJK8ZcpvTk3xoWvkZ\nwPokU/3jtiQ/2DIPfBE4fto2/wQ8ODB/DPBnszzni5LcmeTr/ePWJLcPzH8jyaf61VcBNyf58sDj\ngX6bR2rAzcBkv/9zk5w/7WkfBH4yx4/iRf22lyS5O8m6JJcOLH8usF+/zgv7n/HXkjxrjn1ueeG8\nv9/n3UmuH1j2liTfT/LXSfaftt0fJ3n5DPv7uf659+3nlyf5oyTfTvLVJEfP1R7tAqrKh49ZH8BK\n4HvA4cDjgNuAQ+fZ5mTgh8CHZ1h2HPC4fvrFwCX9dIBzgBXT1n8z8F/66cfRhf/3gLsHHr84SztW\nA18e8jj3Ar4G7DHHOm8AzptW+zKwup+eAM4YWLYCuA/4mX7+TiD99F/0P6cPA0cAjwfuAX4R+Hlg\nap72HgpcOUP9JOCr/c/qN4ELB5a9Bfhn4OUzbHcZ8DsD868FLgGW0b3YfRfYZ9z/H30s/mHPXvN5\nAXBTVd1YVZuAq+l613N5BfDfZ1l2LHBJkkyrvxz4DbowIslEkm/Shc45Sb4AvAz4UFWtqqoDq+pA\n4NvAw4s4LpIcPfCuYj1db//6gXceU0l+a2CT2a5AXJ7k1f0+npJkj77+3+h67Xcn+SngXwGnJ/lV\n4EfAAwP7+DXg6qr6v1V1G3BHkifN0fxn0r3QTHcK8L7+d/UXwNH9sT4V2B/46Aw/h+cDPwesHSif\n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\n1X2VAwLB9wAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x291bc918b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x291bcc87b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x291bd117390>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# -*- coding: utf-8 -*-\n",
    "\n",
    "import random\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus']=False #用来正常显示负号\n",
    "\n",
    "#首先模拟一次实验的结果,n表示硬币数量\n",
    "def simu(n):\n",
    "    #n个硬币\n",
    "    X=[[] for i in range (n)]\n",
    "    #记录正面硬币数最小值\n",
    "    m=n\n",
    "    for i in range(n):\n",
    "        for j in range(10):\n",
    "            #利用0,1随机树模拟,1表示正面,0表示反面\n",
    "            X[i].append(random.randint(0,1))\n",
    "        #最后一个元素记录正面数\n",
    "        fra=sum(X[i])\n",
    "        X[i].append(fra)\n",
    "        if(fra<m):\n",
    "            m=fra\n",
    "    #第一个元素\n",
    "    y1=X[0][-1]\n",
    "    #随机元素\n",
    "    y2=X[random.randint(0,n-1)][-1]\n",
    "    #最小值\n",
    "    y3=m\n",
    "    return y1,y2,y3\n",
    "\n",
    "#记录正面硬币得分的具体情况，存入一个长度为11的列表，第i个元素表示得分为i的次数\n",
    "Y1=[0]*11\n",
    "Y2=[0]*11\n",
    "Y3=[0]*11\n",
    "n=1000\n",
    "for i in range(10000):\n",
    "    y1,y2,y3=simu(n)\n",
    "    Y1[y1]+=1\n",
    "    Y2[y2]+=1\n",
    "    Y3[y3]+=1\n",
    "\n",
    "#计算正面的次数\n",
    "def total(x):\n",
    "    s=0\n",
    "    for i in range(len(x)):\n",
    "        s+=i*x[i]\n",
    "    return s\n",
    "\n",
    "#作图\n",
    "plt.bar(range(11),Y1)\n",
    "plt.title(u'C 1平均正面比例'+str(total(Y1)/100000.0))\n",
    "plt.show()\n",
    "\n",
    "plt.bar(range(11),Y2)\n",
    "plt.title(u'C rand平均正面比例'+str(total(Y2)/100000.0))\n",
    "plt.show()\n",
    "\n",
    "plt.bar(range(11),Y3)\n",
    "plt.title(u'C min平均正面比例'+str(total(Y3)/100000.0))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "不出意外,$v_1,v_{rand}$的平均得分率为$0.5$左右,而$v_{min}$的平均得分率较低。事实上，我们可以求出$E(v_{min})$,这里来分析一下：\n",
    "这里有$1000$个得分率样本$X_1,X_2,...,X_{1000}$，所以这里\n",
    "$$\n",
    "E(v_{min})=E(min(X_1,X_2,...,X_{1000}))\n",
    "$$\n",
    "下面计算数学期望,首先给出分布函数：\n",
    "$$\n",
    "P(v_{min}\\le \\frac k{10})=1-P(v_{min}\\ge \\frac{k+1}{10})\n",
    "\\\\ =1-P(min(X_1,X_2,...,X_{1000})\\ge \\frac{k+1}{10})\n",
    "\\\\ =1-(\\sum_{i=k+1}^{10}C_{10}^i(\\frac1 2)^{10})^{1000}\n",
    "$$\n",
    "所以：\n",
    "$$\n",
    "P(v_{min}=\\frac k{10})=P(v_{min}\\le \\frac k{10})-P(v_{min}\\le \\frac {k-1}{10})\n",
    "\\\\ =1-(\\sum_{i=k+1}^{10}C_{10}^i(\\frac1 2)^{10})^{1000}-[1-(\\sum_{i=k}^{10}C_{10}^i(\\frac1 2)^{10})^{1000}]\n",
    "\\\\ =(\\sum_{i=k}^{10}C_{10}^i(\\frac1 2)^{10})^{1000}-(\\sum_{i=k+1}^{10}C_{10}^i(\\frac1 2)^{10})^{1000}\n",
    "$$\n",
    "因此：\n",
    "$$\n",
    "E(v_{min})=\\sum_{k=0}^{10}\\frac k{10}\\times P(v_{min}=k)\n",
    "\\\\ =\\sum_{k=0}^{10}\\frac k{10}\\times[(\\sum_{i=k}^{10}C_{10}^i(\\frac1 2)^{10})^{1000}-(\\sum_{i=k+1}^{10}C_{10}^i(\\frac1 2)^{10})^{1000}]\n",
    "$$\n",
    "这里使用Python计算结果，最后得到$\\mu\\approx0.037644419141365526$，可以看到和之前模拟的结果一致"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.0376444191414\n"
     ]
    }
   ],
   "source": [
    "from scipy.special import comb\n",
    "\n",
    "#P(v<=k),n表示一共几个硬币\n",
    "def f(k,n):\n",
    "    s=0\n",
    "    for i in range(k+1,11):\n",
    "        s+=comb(10,i)/(2**10)\n",
    "    return 1-s**n\n",
    "\n",
    "#P(v=k)\n",
    "def g(k,n):\n",
    "    return f(k,n)-f(k-1,n)\n",
    "\n",
    "def h(n):\n",
    "    s=0\n",
    "    for k in range(11):\n",
    "        s+=k/10.0*g(k,n)\n",
    "    return s\n",
    "\n",
    "print(h(1000))\n",
    "#0.03764441914136553"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(c)  这里根据上述的结果作图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nvgAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x12b28ff7320>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import math\n",
    "import numpy as np\n",
    "\n",
    "epsilon=np.arange(0,2,0.01)\n",
    "\n",
    "Z1=np.zeros(len(epsilon))\n",
    "Z2=np.zeros(len(epsilon))\n",
    "Z3=np.zeros(len(epsilon))\n",
    "\n",
    "#计算P(|u-v|>epsilon)\n",
    "for i in range(len(epsilon)):\n",
    "    for j in range(11):\n",
    "        if abs((j-5)/10.0)>epsilon[i]:\n",
    "            Z1[i]+=Y1[j]\n",
    "            Z2[i]+=Y2[j]\n",
    "            Z3[i]+=Y3[j]\n",
    "Z1=Z1/10000\n",
    "Z2=Z2/10000\n",
    "Z3=Z3/10000\n",
    "\n",
    "#Hoeffding上界值\n",
    "Z=np.array([2*math.exp(-2*(i**2)*10) for i in epsilon])\n",
    "\n",
    "#作图\n",
    "plt.plot(epsilon,Z,label=u\"Hoeffding上界\")\n",
    "plt.plot(epsilon,Z1,label=u\"P(|v1-u|)\")\n",
    "plt.plot(epsilon,Z2,label=u\"P(|vrand-u|)\")\n",
    "plt.plot(epsilon,Z3,label=u\"P(|vmin-u|)\")\n",
    "plt.xlabel(u'epsilon')\n",
    "plt.ylabel(u'概率')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(d) 可以看到计算出来的$P(|v_{min}-\\mu|>\\epsilon)$比$Hoeffding$上界值大，所以$v_{min}$违背了$Hoeffding$不等式"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 1.11 (Page 25)\n",
    "We are given a data set $D$ of 25 training examples from an unknown target function $f:X\\to Y$, where $X=R$ and $Y$= {-1, +1}. To learn $f$, we use a simple hypothesis set = ${h_1, h_2}$ where $h_1$ is the constant +1 function and $h_2$ is the constant -1.\n",
    "\n",
    "We consider two learning algorithms, $S$ (smart) and $C$ (crazy). $S$ chooses the hypothesis that agrees the most with $D$ and $C$ chooses the other hypothesis deliberately. Let us see how these algorithms perfrm out of sample from the deterministic and probabilistic points of view. Assume in the probabilistic view that there is a probability distribution on $X$ , and let $P[f(x) =+1] = p$.  \n",
    "\n",
    "(a) Can S produce a hypothesis that is guaranteed to perform better than random on any point outside $D$?  \n",
    "(b) Assume for the rest of the exercise that all the examples in $D$ have $Y_n = +1$. Is it possible that the $C$ hypothesis that produces turns out to be better than the hypothesis that $S$ produces?  \n",
    "(c) If $p = 0.9$, what is the probability that $S$ will produce a better hypothesis than $C$?  \n",
    "(d) Is there any value of $p$ for which it is more likely than not that $C$ will produce a better hypothesis than $S$? "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a) 利用S算法会选择在训练集上效果较好的假设，但是并不能保证在训练集以外的部分表现的很好  \n",
    "\n",
    "(b) 这题及之后的习题假设在训练集上的$Y_n = +1$均为1，利用C算法得到的假设在训练集上的准确率为0，利用D算法的假设在训练集上的准确率为1，在训练集以外的部分S算法得到的假设仍然有可能比D算法得到的假设表现好  \n",
    "\n",
    "(c) 令$S$产生的结果为$f_s$,$C$产生的结果为$f_c$，需要求得的概率为$P(P(f_s=f)>P(f_c=f))$  \n",
    "由$S,C$的特点我们知道$P(f_s=f)=0.9,P(f_c=f)=0.1$，因为$f_s(x)$恒等于1,$P[f(x) =+1] = 0.9$，所以$P(f_s=f)=0.9$,同理$P(f_c=f)=0.1$  \n",
    "所以$P(P(f_s=f)>P(f_c=f))=P(0.9>0.1)=1$  \n",
    "\n",
    "(d) 这题是上题的一般化结果,题目实际上问的是是否存在$p$,使得$P(P(f_s=f)>P(f_c=f))<0.5?$  \n",
    "因为\n",
    "$$\n",
    "P[f(x) =+1] = p\n",
    "$$\n",
    "所以\n",
    "$$\n",
    "P(f_s=f)=p,P(f_c=f)=1-p,    \n",
    "P(P(f_s=f)>P(f_c=f))=P(p>1-p)\n",
    "$$\n",
    "所以当$p<0.5$时，$P(P(f_s=f)>P(f_c=f))=P(p>1-p)=0$  \n",
    "因此本题结果为$p<0.5$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "#### Exercise 1.12 (Page 26)\n",
    "A friend comes to you with a learning problem. She says the target function is completely unknown, but she has 4, 000 data points. She is willing to pay you to solve her problem and produce for her a $g$ which approximates  $f$. What is the best that you can promise her among the following:  \n",
    "\n",
    "(a) After learning you will provide her with a $g$ that you will guarantee approximates $f$ well out of sample.  \n",
    "(b) After learning you will provide her with a $g$,and with high probability the $g$ which you produce will approximate $f$ well out of sample.  \n",
    "(c) One of two things will happen.  \n",
    "&emsp;(i) You will produce a hypothesis $g$;  \n",
    "&emsp;(ii) You will declare that you failed .  \n",
    "&emsp;If you do return a hypothesis $g$, then with high probability the $g$ which you produce will approximate well out of sample."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这里选(c),因为不能保证学习出一个比较好的假设"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Exercise 1.13 (Page 31)\n",
    "Consider the bin model for a hypothesis $h$ that makes an error with probability $\\mu$ in approximating a deterministic target function $f$(both $h$ and $f$ are binary functions).If we use the same $h$ to approximate a noisy version of $f$ given by\n",
    "$$\n",
    "P(y|x)=\\begin{cases}\n",
    "\\lambda & y = f(x)\n",
    "\\\\ 1-\\lambda & y\\ne f(x)\n",
    "\\end{cases}\n",
    "$$  \n",
    "\n",
    "(a) What is the probability of error that $h$ makes in approximating $y$?  \n",
    "(b) At what value of $\\lambda$ will the perfrmance of $h$ be independent of $\\mu$?  \n",
    "&emsp;[Hint: The noisy target will look completely random.]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)错误有两种，一种是“去真”:$\\lambda\\mu$，另一种是“取伪”：$(1-\\lambda)(1-\\mu)$，所以犯错的概率一共$\\lambda\\mu+(1-\\lambda)(1-\\mu)$  \n",
    "\n",
    "(b)\n",
    "$$\n",
    "P=\\lambda\\mu+(1-\\lambda)(1-\\mu)=\\lambda\\mu+1-\\mu-\\lambda+\\lambda\\mu=1-\\lambda+(2\\lambda-1)\\mu\n",
    "$$\n",
    "所以当$\\lambda=\\frac 1 2$，$P=1-\\lambda$，因此和$\\mu$独立"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Part 2:Problems"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 1.1 (Page 33)\n",
    "We have 2 opaque bags, each containing 2 balls. One bag has 2 black balls and the other has a black and a white ball . You pick a bag at random and then pick one of the balls in that bag at random. When you look at the ball it is black. You now pick the second ball from that same bag.What is the probability that this ball is also black? \n",
    "Hint: Use Bayes' Theorem:$P[A\\ and\\ B] = P[A | B] P [B] = P[B | A] P[A]$ "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这题还是比较基础的，有两个包，一个包里有两个黑球，另一个包里有一个黑球和一个白球，先随机取一个包，再随机从这个包里随机取一个球，当发现第一取出的球是黑球时，再从这个包里再取一次球，现在问第二次取出的球也是黑色的概率?  \n",
    "$$\n",
    "P=\\frac 1 2 \\times 1\\times 1+\\frac 1 2\\times \\frac 1 2\\times 0=\\frac 1 2\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 1.2 (Page 33)\n",
    "Consider the perceptron in two dimensions: $h(x)=sign(w^Tx)$ where $w = [w_0 , w_1 , w_2]^T$ and $x = [1, x_1 , x_2 ]^T$. Technically, $x$ has three coordinates, but we call this perceptron two-dimensional because the first coordinate is fixed at 1 .  \n",
    "(a) Show that the regions on the plane where $h(x) = + 1$ and $h(x) = - 1$ are separated by a line. If we express this line by the equation $x_2 = ax_1 + b$,what are the slope $a$ and intercept $b$ in terms of $w_0 , w_1 , w_2$?  \n",
    "(b) Draw a picture for the cases $w = [1, 2, 3]^T$ and $w = - [1 , 2, 3]^T$.  \n",
    "In more than two dimensions, the +1 and - 1 regions are separated by a hyperplane, the generalization of a line."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a) 由解析几何知识，$w^Tx=0$直线的一侧每个点$w^Tx>0$，另一侧的每个点$w^Tx<0$，因此$h(x)=+1$和$ h(x)=−1$被一条直线所分开。  \n",
    "直线方程为\n",
    "$$\n",
    "w^Tx=w_0+w_1x_1+w_2x_2=0 \n",
    "$$\n",
    "所以当$w_2\\ne 0$时\n",
    "$$\n",
    "x_2=-\\frac {w_0}{w_2}-\\frac{w_1}{w_2}x_1\n",
    "$$\n",
    "\n",
    "(b)用Python作图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1fd4b8d6320>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "x=np.arange(-1,1,0.1)\n",
    "y1=np.array([-1/3-2/3*i for i in x])\n",
    "y2=np.array([-1/3-2/3*i for i in x])\n",
    "plt.plot(x,y1,label='w=[1,2,3]T')\n",
    "plt.plot(x,y2,label='w=-[1,2,3]T')\n",
    "plt.xlabel('x')\n",
    "plt.ylabel('y')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到两条直线重合，这是由\n",
    "$x_2=-\\frac {w_0}{w_2}-\\frac{w_1}{w_2}x_1$所决定的"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 1.3 (Page 33)\n",
    "Prove that the PLA eventually converges to a linear separator for separable data. The following steps will guide you through the proof. Let $w*$ be an optimal set of weights (one which separates the data).The essential idea in this proof is to show that the PLA weights $w(t$) get \"more aligned\" with $w^*$ with every iteration . For simplicity, assume that $w(0) = 0$.  \n",
    "\n",
    "(a) Let $\\rho = {min}_{1\\le n\\le N} y_n(w^{*T} x_n )$ . Show that $\\rho > 0$.  \n",
    "\n",
    "(b) Show that $w^T (t)w^*\\ge w^T(t- 1)w^*+\\rho$, and conclude that $w^T(t)w^* \\ge t\\rho$.[Hint: Use induction.]  \n",
    "\n",
    "(c) Show that $||w (t) ||^2 \\le  ||w(t - 1) ||^2 + ||x(t - 1) ||^2.$  \n",
    "[Hint: $y(t - 1) · (w^T(t - l)x(t - 1)) \\le 0$ because $x(t - 1)$ was misclassified by $w (t - 1 )$].  \n",
    "\n",
    "(d) Show by induction that $||w(t) ||^2 \\le tR^2$ , where$ R = {max}_{1\\le n\\le N} ||xn ||$ ·  \n",
    "\n",
    "(e) Using (b) and (d), show that \n",
    "$$\n",
    "\\frac {w (t)} {||w(t)||}w^*\\ge \\sqrt{t}\\frac \\rho R\n",
    "$$\n",
    "and hence prove that\n",
    "$$\n",
    "t\\le \\frac {R^2||w^*||^2} {\\rho^2}\n",
    "$$\n",
    "[Hint: $\\frac {w (t)w^*} {||w(t)||\\ ||w^*||}\\le 1$ . Why?]  \n",
    "In practice, PLA converges more quickly than the bound $\\frac {R^2||w^*||^2} {\\rho^2}$ suggests.Nevertheless, because we do not know $\\rho$ in advance, we can 't determine the number of iterations to convergence, which does pose a problem if the data is non-separable."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a) 因为可分,所以$\\forall\\ n(1\\le n \\le N)，y_n(w^{*T} x_n )>0$，然后因为$N$有限，所以$\\rho = {min}_{1\\le n\\le N} y_n(w^{*T} x_n )>0$\n",
    "\n",
    "(b)先回顾下更新规则:\n",
    "$$\n",
    "对于y(t)\\ne\n",
    "sign(w^T(t)x(t))的数据, 更新规则是\n",
    "w(t + 1) = w(t) + y(t)x(t) \n",
    "$$\n",
    "因此\n",
    "$$\n",
    "w^T (t)w^*=(w^T (t-1)+y(t)x^T(t))w^*=w^T (t-1)w^*+y(t)x^T(t)w^*=w^T (t-1)w^*+y(t)x(t)w^{*T}\\ge w^T(t- 1)w^*+\\rho\n",
    "$$\n",
    "这里$y(t)x^T(t)w^*=y(t)x(t)w^{*T}$是因为$x^T(t)w^*$是一个实数，所以它的转置$x(t)w^{*T}$等于它本身，最后一步是因为$y(t)x(t)w^{*T}\\ge {min}_{1\\le n\\le N} y_n(w^{*T} x_n )=\\rho$\n",
    "\n",
    "再来证明 $w^T(t)w^* \\ge t\\rho$，利用数学归纳法\n",
    "$t=0$时,$w^T(t)w^*=w^T(0)w^*=0,t\\rho=0$，因此$t=0$时结论成立  \n",
    "假设$t=k$时结论成立，$t=k+1$时，由之前证明的结论知\n",
    "$$\n",
    "w^T (k+1)w^*\\ge w^T(k)w^*+\\rho\\ge k\\rho +\\rho=(k+1)\\rho\n",
    "$$\n",
    "所以$t=k+1$时结论成立\n",
    "\n",
    "(c)对$w(t + 1) = w(t) + y(t)x(t)$两边取模的平方，注意这里$||x||=x^Tx,x\\in R^n$\n",
    "$$\n",
    "||w(t + 1)||^2 = ||w(t) + y(t)x(t)||^2\n",
    "\\\\ =(w(t) + y(t)x(t))^T(w(t) + y(t)x(t))\n",
    "\\\\ =w^T(t)w(t)+y(t)x^T(t)w(t)+w^T(t)y(t)x(t)+y(t)x^T(t)y(t)x(t)\n",
    "$$\n",
    "注意到实数的转置等于其本身,$y(t)=\\pm 1$，可得\n",
    "$$\n",
    "y(t)x^T(t)w(t)=w^T(t)y(t)x(t)\n",
    "\\\\ y(t)x^T(t)y(t)x(t)=y^2(t)x^T(t)x(t)=x^T(t)x(t)\n",
    "$$\n",
    "所以\n",
    "$$\n",
    "||w(t + 1)||^2 =w^T(t)w(t)+2y(t)x^T(t)w(t)+x^T(t)x(t)\n",
    "\\\\ = ||w(t) ||^2 + ||x(t) ||^2+2y(t)x^T(t)w(t)\n",
    "$$\n",
    "因为误分，所以$y(t)x^T(t)w(t)\\le0$  \n",
    "因此\n",
    "$$\n",
    "||w(t + 1)||^2  = ||w(t) ||^2 + ||x(t) ||^2+2y(t)x^T(t)w(t)\n",
    "\\\\ \\le||w(t) ||^2 + ||x(t) ||^2\n",
    "$$\n",
    "\n",
    "(d)利用数学归纳法，注意$w(0)=0$  \n",
    "当$t=1$时，由(e)知$||w(1) ||^2\\le||w(0) ||^2 + ||x(0) ||^2\\le R^2$  \n",
    "假设$t=k$时结论成立，当$t=k+1$时：\n",
    "$$\n",
    "||w(t+1) ||^2\\le||w(t) ||^2 + ||x(t) ||^2\\le tR^2+R^2=(t+1)R^2\n",
    "$$\n",
    "因此$t=k+1$时结论成立  \n",
    "\n",
    "(e)由(d)知$||w(t) ||^2 \\le tR^2$，所以$||w(t) || \\le \\sqrt tR$\n",
    "由(b)知$w^T(t)w^* \\ge t\\rho$，所以\n",
    "$$\n",
    "\\frac {w^T(t)w^*}{||w(t) ||} \\ge \\frac {t\\rho} {\\sqrt tR}=\\sqrt t \\frac {\\rho}R\n",
    "$$\n",
    "由$Cauthy-Schwarz$不等式知\n",
    "$$\n",
    "w^T(t)w^*\\le ||w(t) ||\\ ||w^*||\n",
    "$$\n",
    "因此\n",
    "$$\n",
    "\\sqrt t \\frac {\\rho}R\\le||w^*||\n",
    "\\\\ t\\le \\frac {||w^*||^2R^2}{\\rho^2}\n",
    "$$\n",
    "这意味着$t$是一个有限的数，所以$PLA$一定会收敛"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "#### Problem 1.4 (Page 34） \n",
    "In Exercise 1.4, we use an artificial data set to study the perceptron learning algorithm . This problem leads you to explore the algorithm\n",
    "further with data sets of different sizes and dimensions.\n",
    "\n",
    "(a) Generate a linearly separable data set of size 20 as indicated in Exercise 1.4. Plot the examples $\\{ (x_n , y_n) \\}$ as well as the target function $f$ on a plane. Be sure to mark the examples from different classes differently,\n",
    "and add labels to the axes of the plot.  \n",
    "(b) Run the perceptron learning algorithm on the data set above. Report the number of updates that the algorithm takes before converging. Plot the examples $\\{ (x_n , y_n) \\}$ , the target function f, and the final hypothesis g in the same figure. Comment on whether f is close to g.  \n",
    "(c) Repeat everything in (b) with another randomly generated data set of size 20. Compare your results with (b) .  \n",
    "(d) Repeat everything in (b) with another randomly generated data set of size 100. Compare your results with (b) .  \n",
    "(e) Repeat everything in (b) with another randomly generated data set of size 1, 000. Compare your results with (b) .  \n",
    "(f) Modify the  algorithm such that it takes $x_n\\in R^{10}$ instead of $R^2$ . Randomly generate a linearly separable data set of size 1, 000 with $x_n\\in R^{10}$ and feed the data set to the algorithm. How many updates does the algorithm take to converge?  \n",
    "(g) Repeat the algorithm on the same data set as (f) for 100 experiments. In the iterations of each experiment, pick $x(t)$ randomly instead of deterministically. Plot a histogram for the number of updates that the algorithm takes to converge.  \n",
    "(h) Summarize your conclusions with respect to accuracy and running time as a function of $N$ and $d$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)(b)(c)这三题和Exercise 1.4基本一致，稍微不同的是需要画出目标函数f以及更新次数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n77+zatWqZPcZ4/79+2zZsgW/dLSE78qVK2zfvp2wsLAEz5kwYQLnz59/8mDWrFC0qPE5EbTWDBs2\njPv3U1432dvbm127dhEVlXHumgsPD2fkyJHcu5fEW8FtkHPRPPz+ZkNm9anD/Ufh9PhhHyOWHudu\nUopKFXGB/hvA8zu4dxZ+bAJbJxpTJrZOa23aR7169fR/nTlz5qljacHHx0cPGzZMR0RE6FKlSmkP\nDw/t4eGhT548meBzxo0bp11dXfXQoUNjjw0fPlz7+Pg8de6rr7761LGAgADdu3fvZ8b16NEjXatW\nrWeec//+fe3u7q4nT56sq1evru/evau11trX11c3adLkqfM7d+6sjx07Fvv4zJkz2tPTM/bxwIED\nY7//MmXK6CVLluiDBw/qpk2b6ho1auh58+ZprbU+evSobtSokW7atKmeMGFC7PPDw8N148aN9a1b\ntxI85uXlpdu2bas//PBD3bJlywTPe/Dgge7bt+8zv/8YPj4+evz48U8dX7Jkif7111+f+VwvLy89\nYMCAZ56zePFi3bNnTz1s2DDdr18/rbXWnp6esa9VkSJF9N69e2PjbtCggQ4ODtZaa/3rr79qFxcX\n7eHhofv06ZNgv2vXrtWNGzfWNWrU0GvXrk2wj8WLF+smTZpod3d3vXXrVq211leuXNGurq66adOm\n+siRIwkei6+Py5cv67fffvuZ339C4usjPqn9u/4oLEJP3XhWV/povXYZt1HP3XFZh0dGJa2R4Hta\n/z1Y6/F5tP66utbnN1kn2OcADutE5NhMk7AnTZqkz5w5o48cOaLff//9555/+PBh3bJlSx0dHa0n\nTJigt2zZorU2vp9JkyY9dX58CXvRokV6w4YNCfYRGRmpO3XqpMuUKfPMWLy8vPS+ffu01lqPHDlS\nb9y4Ud+/f1+3a9dO16lT54lzFy9erN95553Yx5cuXdKdOnXSHh4eT7UbFRWl27Rpo4ODg3W3bt30\nzZs3dWRkpHZ2dtZaG4n9zp07Wmutq1Wrph8+fKi11nry5Mn666+/fqKt/x774YcfYs+vV6+eDg0N\nTfC5H3zwgb527dozXwOtE07Yffv21VFRCf+i7tu3T7do0SLe/6O4vvrqKx0ZGam11rp69epPfC04\nOFi3bdtWR0dHa621HjBggF6xYkXs1996662nftbj67dJkyY6LCxMBwcHP/V/F9OHn5+fdnV11RER\n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\nlazB+Avg5MmThIWFcfPmTXx8fGKn4/7bR+7cuQkPD6dv376UL18eMEa6vr6+aK25fPkyhQoVeupY\njhw54u0jMjKSq1evPvEXXaVKlfD39+fgwYM0btyYcuXK4eXl9cRH/fr14+3X1hXP58j3feqy5M0G\n5HDIwsBfj/DqgkNcvpfIolJKgUs3o6BU/YFweL5Rd/vUsrRdu52Yie7EftjyRcfo6Gj94osv6h07\ndugaNWro6tWr648++khrrbW/v79+4403njg/KipKN2rUSL/99tu6cuXK+sqVK/ru3bv6xRdfjL3w\nlBgDBgzQ58+ff+Y5cS8Ient767Fjxz7x9fv37+vWrVvrpk2b6iFDhjzRf9zn3rp1S3fo0EE3atRI\nt27dWgcGBsZ7ntZaN27cWPv5+cU+njdvni5evLjOkyePfvfdd7XWWr/00ku6bNmysRegzp07p729\nvXWLFi10/fr1da9evXRERES8xw4ePKjd3Nx0o0aNYledxHfekiVL9I8//vhEbMOGDdNLly7V9+/f\n13Xr1tVBQUHPfP18fX117969n3nh0cfH54mLf9OnT9e7du164px169bpunXr6saNG+s1a9bEHq9W\nrdoTbe/YsUM3bdpU165dO/a1mj59uq5YsaJ2c3PTXl5eCfb76aef6oIFC+oCBQroadOmJdhHeHi4\nbtCggX7w4EHssZUrV+qGDRvqXr166WHDhiV4LL4+Pv/883gvgE+fPv2JFUDxia+P+NjK7/p/hUdG\n6fm7rujq4zbqih+t05+vO6ODQiOS1sjNI1r/2My4KLnoBa39LpkaI7JK5Gk3btzQv/32W6LPf/z4\nsf7rr7/05cuXtdZa//bbb/r69etJ6jMgIED/8MMPSXpOZjJlyhRT2tm0adMTSxkzquPHj+tVq1Y9\nkdzjOxZXSEiInjlz5lPHp02bpt3c3J5YnpmUfv/Lln7X43M3MFSP+vO4LvPBWu02eYtecfRmkgZf\nOipS6/1ztP6shNaTCmntNVXriFBTYktswrZ68aezZ89StWpV0/oQQtim9PK7fuz6A8av9ubkzQDc\nyhpFpVyKJ2FuOvBf2DQGvFeAUyXoPAPKNUtRTDZT/EkIIWxJndL5WTm0MV92r8Hle4/o8t1uPll5\nmoePE1lUKk8xeHEh9F0O0RHwSxdYMRiCrX8nqSRsIUSmY2en6F2/NNtHGkWlfjtwjRbTvPjtQBKK\n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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1bfb5a70fd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# -*- coding: utf-8 -*-\n",
    "import random\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus']=False #用来正常显示负号\n",
    "\n",
    "#定义2n组数据的函数为f(n)\n",
    "def f(n):\n",
    "    #首先生成2n个可分的数据，生成两组，每一组有n个点，第一组点的每个分量属于[0,2],第二组点的每个分量属于[2,4],目标函数取x+y=4\n",
    "    #第一组n个点\n",
    "    X1=[]\n",
    "    Y1=[]\n",
    "    #第二组n个点\n",
    "    X2=[]\n",
    "    Y2=[]\n",
    "    for i in range(n):\n",
    "        X1.append(random.uniform(0,2))\n",
    "        Y1.append(random.uniform(0,2))\n",
    "        X2.append(random.uniform(2,4))\n",
    "        Y2.append(random.uniform(2,4))\n",
    "\n",
    "    #给数据打标记,第一象限的标记为1，第三象限的标记为-1,注意添加第一个分量为1\n",
    "    data1=[np.array([1,X1[i],Y1[i],1]) for i in range(n)]\n",
    "    data2=[np.array([1,X2[i],Y2[i],-1]) for i in range(n)]\n",
    "    data=data1+data2\n",
    "    random.shuffle(data)\n",
    "\n",
    "    #定义sign函数\n",
    "    def sign(x):\n",
    "        if x>=0:\n",
    "            return 1\n",
    "        else:\n",
    "            return -1\n",
    "\n",
    "    #定义判别函数，判断所有数据是否分类完成\n",
    "    def Judge(x,w):\n",
    "        flag=1\n",
    "        for i in x:\n",
    "            if sign(i[:3].dot(w))*i[-1]<0:\n",
    "                flag=0\n",
    "                break\n",
    "        return flag    \n",
    "\n",
    "    #记录次数\n",
    "    s=0\n",
    "    #初始化w=[0,0]\n",
    "    w=np.array([0,0,0],dtype=float)\n",
    "    while (Judge(data,w)==0):\n",
    "        i=data[random.randint(0,2*n-1)]\n",
    "        if sign(i[:3].dot(w))*i[-1]<0:\n",
    "            w+=i[-1]*i[:3]\n",
    "            s+=1\n",
    "\n",
    "    #直线方程为w0+w1*x+w2*y=0,根据此生成点\n",
    "    X3=np.arange(0,4,0.1)\n",
    "    Y3=np.array([(X3[i]*w[1]+w[0])/(-w[2]) for i in range(len(X3))])\n",
    "\n",
    "    #目标函数为x+y=4\n",
    "    X4=np.arange(0,4,0.1)\n",
    "    Y4=4-X4\n",
    "\n",
    "    #画出图片\n",
    "    plt.scatter(X1,Y1,c='r',s=1)\n",
    "    plt.scatter(X2,Y2,c='b',s=1)\n",
    "    plt.plot(X3,Y3,label=\"(\"+str(w[0])+\")+(\"+str(w[1])+\")x+(\"+str(w[2])+\")y=0\")\n",
    "    plt.plot(X4,Y4,label=\"x+y=4\")\n",
    "    plt.title(u\"经过\"+str(s)+u\"次迭代收敛\")\n",
    "    plt.legend()\n",
    "    plt.show()\n",
    "\n",
    "f(10)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(d)数据量改为100"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nK4s8sBu2/gq7t5bae1+1ahVTpkxh//79ANx///389ttvoTA/5AQj7PGA/7K9DWgYoM0PwOmq2hmI\nAwbkb6CqY1S1k6p2ql+/fkntjU4idLbpmjVrWL9+PSeffDIDBw7k1FNP5dZbby30M1dffTXdunXj\n4YcfBuCmm25i4sSJAcXhr3/9a4F9nnfeeQX2sWXLFk499dRC7Vi3bh2pqan06dOHYcOGoarcd999\npKamkpqaSps2bXjsscc4ePAgZ599NikpKbz++usAAdv5+eWXX+jbt2+R7c4++2wWLVoEwI8//sjp\np59OSkoKTz/99GF25m0XbB+PPfYYzz//PDk5OYWOgZ9A4zx79mwaNGhA165dA35m+fLlXHTRRcyc\nOZNevXpx4EDBXvGvv/7K4MGDc1//8MMP9OzZk/bt2/Paa68BcO211+Z+jxYtWvD++++zcOFCUlJS\n6NmzJw888AAAM2bMIDk5mdTUVE477bQCbflx4UJOH3wxKedfx9OvfAA7NkBGGr/+vLhIWzIzM+nZ\nsycpKSlMmjQJgGnTpjF8+HC++uorBgxw8vb888/z0EMPBTXG+QnUR0hR1UIfwHNAV9/z84C7ArSp\nkuf5jcCthZ2zY8eOapSMpUuXem1CLg8++KAuXbpUL7zwQp09e7aqqg4ZMkSnTJkSsP3HH3+sV155\npaqqDh06VJcvX66qql988YW+/fbbR7T3tw3UZ0Fs27ZN+/XrpyeffHKhtt9111255znzzDN18eLF\nh71//vnn64YNG/Tpp5/W++67T1VV+/fvrzt37gzYTlU1JydH+/btq7169Tqiv7zt3n33Xb3pppty\n3+vevbuuW7dOc3JytFu3brpq1aqA7YrTx+jRo3X69OmFjoGfQON83XXXaWZmZoGf+eijjzQtLS23\n32XLlgVsl5aWpgMHDjzM3nPPPVc3bNig2dnZ2qZNm8PaHzp0SPv27atZWVk6bNgw3bJli6qqtm3b\nVjMzM/Xpp5/WL774okhbjhjTX+Zr2qzPdODpp2qvHt1Vc3IKtOWGG27QN954Q7OzszU1NVVzcnL0\nxRdfzB2Pjh076r59+1RV9Y477tC1a9cWOE579uzRXr16HfaYMGFCwD7yE+jvHJivRWi2qgZV7rgA\nF36ZA5wIBLr3eEdEHgF+Ac4BHi3V1SaaCeHa6g98toSlm0K740zbxrW47+x2QbVduXIlxx13HMuX\nL6dDhw4ANGjQgB07dgRsP3XqVIYMGQLAGWecwYwZM2jdujVdu3bloYce4vLLLwdgxIgRLF26lGXL\nlpGamkqvXr1yPTZ/nwVRsWJFxo4de5hXFohHHnkk93lGRgaJeX4XP/zwA02bNqVJkyZMnTqVf/3r\nXwD07NmT+fPn07t37yPaAbzxxhv07t2byZMnH9ZX3nbbtm3j1ltvZfjw4UyZMoXevXuzbds2jj76\naAASEhLYuXNnwHbB9gHQtWtXvv/++9w7l//+978sXLiQ+++/n549ezJt2jSuvPJKtm3bljvOF110\nEcOHDwdg79691K5du8Dxu+CCC8jOzmbixIls376d5OTkgO1q1qzJxx9/TL9+fy69m5CQwOLFi9m7\nd+9h4w7w8ccfM2DAAOLj43n55ZcBN3cjOzub6tWrM2fOHMaNG8ddd93F1VdfzfXXXx/QliPGNLsS\nRzU/iY/fepF+F1wJGSugTrOAtkyfPp1HH32UihUrcuyxx7JmzRquu+469u7dy3vvvUfLli2pUqUK\nAF26dGHRokU0a9YMgN69e/Puu+/SpEkTTjvtNN5++22mTp16xLjce++9R/RR0tLGQAQj7OOB70Wk\nMdAf+IuIPKyqeStkHgTeAwT4VFW/CZmF0UakznA8eNBVviQkHBFPv+CCC3jggQfo2rUrX3755WEh\nh7zs3r07V3jq1auXGyevVq0ae/fuzW03evRowIUI3nzzzcNPkpPjyisTErj2+usPi3H26dOHe++9\nt1j2jx07lnbt2tG4cePcY88991zuhSS/zVu2bAnYLiMjg3fffZfJkycfIbp52/373//mwgsv5Npr\nr+X//u//2LVrFykpKbzwwgvUq1ePNWvW0L59e+69996A7YLpI9CYXnrppbzzzjvcdNNN3HHHHdSs\nWZNPPvmk4HHOw+DBgw+7WF9yySUMGzaMrKwsPvzwQ5o3b15gFUeDBg0Cnm/ixIl89dVXR4TUXn31\nVT766KPDjj3zzDNccsklxMXFMXToUPr27Ut2djYdO3bk4osvJiEh4QhbAo2piIA2cTH4g/vgj98Y\nfEYvJn7+OV9VrpxrS6VKlahRw22u7f+dt2zZki1btjBu3DjatfvT8alWrdphY3PZZZfxwQcfcOml\nl1K5cuXcv538FNRHqChS2FV1p4ikAn2BJ1R1M7A4X5tfcJUx4Y/XuxGFcOu4YD3rkOAvawRo1Ahw\nf9RZWVncc889zJgxgyeffJIrr7wy9w82PzVq1MgVm6ysrNwY8OrVq3O9q6KoJkLW8uXUOOaYXI+u\npPavWrWKp556im+++dMPyczM5I8//iApKekwm2vXrk1WVlbud8vf7s477+Sxxx47YqZg/nYLFy7k\nqaeeolGjRgwZMoSvv/6al19+mSlTpnDvvfdyxx13ICIB23322WdB9QGBx/Rvf/sbI0eO5JVXXily\nuHJyclBVRIQJEyYEbFOnTh3eeustLr/8cn744Qe6dOlS5HkB3nzzTcaNGwfAoEGDGDhwIMcccwzL\nli2jUaNG1KpVK7ft3Llz+eKLL3J/R3369KFSpUpUqlQp19NNSEg4wpZAYwq4ypkKca5yJnO9s+XN\n0VCnGYPOH8LAgQOpmGfmcd6/0xYtWvDJJ59w6qmnsnnzZho1asTq1as58cQTc9tfeOGFDBw4kMqV\nK3PZZZexd+9e+vfvf9j3v+WWWwrsI1QEVceuqttV9UOfqEc2Xleg5F+9MVJKHRMSoGnTw8oaBwwY\nwMcffwzASSedxLp167jlllsKPEXHjh2ZMWMGAIsXL6ZFixYAfPjhh5x11llHtA/kRQ445xw+XrSo\n+OWV+ezfvn07F198Ma+//vphIYcJEybkJscKszl/u2nTpnHHHXeQmprKokWLuOeeewK2S05Ozi2T\nmz9/Ps2bN8+9HQfnWRfULtg+AMaPH88ZZ5yR+zo7O5vnn3+eyy+/nFGjRh3WNtA4n3LKKYVW1gwf\nPjz3/czMTOrUCX4Lu59++onMzEwyMzNZsmRJruiOHTuWc889N7fdmjVrGDFiBO+99x5xcXGoKj16\n9CArK4stW7awcOFCkpOTA9oSaEwPo2JlqNeKn5avITPjDzLTfmDJzz8hQLt27fAvebJ48WKaN2/O\n4MGDSUtLIycnh3379hEfHw+48GLeC1qtWrU4+uijeeWVVzj33HOpVq0aU6dOPewxaNCggH2ElGAC\n8aF+eJo83bpV9Ykn3M9w4IknVMH9DIJwSp7m5OTohRdeqFu2bNF77733sATokiVL9O677z6s/Y4d\nO7R9+/Z68803a5s2bTQzM1N/++03veaaa0rUZ2HkTdZ9++23+p///Oew92+//XZt1KhRbkJr6tSp\nqqp68cUX64IFC3LbrVmzRtu2bas33nijdurUSbOzswO2K6jv/O02btyo/fv31+7du+vpp5+em4y9\n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\ngg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1bfb5ba78d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "f(50)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(e)数据量修改为1000"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1bfb1e521d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "f(500)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(f)这里将数据修改为$R^{10}$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "迭代次数为103\n"
     ]
    }
   ],
   "source": [
    "# -*- coding: utf-8 -*-\n",
    "import random\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus']=False #用来正常显示负号\n",
    "\n",
    "#定义2n组m维数据的函数为g(n,m)\n",
    "def g(n,m):\n",
    "    #首先生成2n个可分的数据，生成两组，每一组有n个点，第一组点的每个分量属于[1,3],第二组点的每个分量属于[5,9],\n",
    "    #第一组数据的标记为1，第二组的标记为-1,注意添加第一个分量为1\n",
    "    #第一组点\n",
    "    data1=[]\n",
    "    #第二组点\n",
    "    data2=[]\n",
    "    for i in range(n):\n",
    "        x1=[1]\n",
    "        x2=[1]\n",
    "        for j in range(m):\n",
    "            x1.append(random.uniform(1,3))\n",
    "            x2.append(random.uniform(5,9))\n",
    "        x1.append(1)\n",
    "        x2.append(-1)\n",
    "        data1.append(np.array(x1))\n",
    "        data2.append(np.array(x2))\n",
    "    data=data1+data2\n",
    "    #打乱数据顺序\n",
    "    random.shuffle(data)\n",
    "\n",
    "    #定义sign函数\n",
    "    def sign(x):\n",
    "        if x>=0:\n",
    "            return 1\n",
    "        else:\n",
    "            return -1\n",
    "\n",
    "    #定义判别函数，判断所有数据是否分类完成\n",
    "    def Judge(x,w):\n",
    "        flag=1\n",
    "        for i in x:\n",
    "            if sign(i[:m+1].dot(w))*i[-1]<0:\n",
    "                flag=0\n",
    "                break\n",
    "        return flag    \n",
    "\n",
    "    #记录次数\n",
    "    s=0\n",
    "    #初始化w\n",
    "    w=np.zeros(m+1)\n",
    "    while (Judge(data,w)==0):\n",
    "        i=data[random.randint(0,2*n-1)]\n",
    "        if sign(i[:m+1].dot(w))*i[-1]<0:\n",
    "            w+=i[-1]*i[:m+1]\n",
    "            s+=1\n",
    "    return s\n",
    "\n",
    "print(\"迭代次数为\"+str(g(500,10)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(g)重复(f)100次，做出直方图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEHCAYAAACncpHfAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4wLCBo\ndHRwOi8vbWF0cGxvdGxpYi5vcmcvpW3flQAAEgdJREFUeJzt3X2QX1ddx/H3p0nBmnSghSVaBgmV\nqoO0kRohgaDLQyptATHgtIoiQo1PxfGBkdZmBsEU247gSJVCJDodBJyA0qFApylKJdYU2KBFHeyo\nmFbLRLY2JgaGUuvXP+6t2W53s3efstuc92tmZ86e3/fePfdM8vvsvb97z6aqkCS156SlHoAkaWkY\nAJLUKANAkhplAEhSowwASWqUASBJjTIAJKlRBoAkNcoAkKRGrVzqARzLE5/4xFq7du1SD0OSHlX2\n7dt3b1WNzFS3rANg7dq1jI2NLfUwJOlRJcldQ+q8BCRJjTIAJKlRBoAkNcoAkKRGGQCS1CgDQJIa\nZQBIUqMMAElq1KI+CJbkdOB7gb+pqnsX82dJx9vayz4+5233X3XhAo5EmptBZwBJdibZm2Tb0Jok\npwEfA54NfCrJyNB9SZIW34wBkGQLsKKqNgJnJjlrYM05wK9U1ZXAzcC5Q/YlSTo+hpwBjAK7+vZu\nYNOQmqr6y6q6Pcn3050F7B2yryRbk4wlGRsfHx94GJKk2RoSAKuAe/r2fcCaoTVJAlwEHAQeGLKv\nqtpRVeurav3IyIyL2UmS5mhIABwBTunbq6fZZsqa6vwC8AXg5QP3JUk6Doa8Ae/j6KWadcD+ITVJ\n3pTkNX3f44H/GrgvSdJxMOQ20BuAPUnOAM4HLk6yvaq2HaNmA1247EpyCfD3dNf8T52iTpK0BGYM\ngKo6nGQU2AxcU1UHgDtmqDnUv7R50u6mq5MkHWeDHgSrqoMcvXtnzjWzqZMkLS4/hJWkRhkAktQo\nA0CSGmUASFKjDABJatSiLgetdrg0svTo4xmAJDXKAJCkRhkAktQoA0CSGmUASFKjDABJapQBIEmN\nMgAkqVEGgCQ1ygCQpEYZAJLUKANAkhplAEhSowwASWqUASBJjTIAJKlRBoAkNcoAkKRGGQCS1KhB\nAZBkZ5K9SbYNrUnyuCQ3Jdmd5CNJHpNkZZK7k9zaf529UAciSZqdGQMgyRZgRVVtBM5MctbAmlcD\n76iq84ADwEuAc4APVtVo//V3C3kwkqThhpwBjAK7+vZuYNOQmqp6V1Xd0veNAF8BNgAvTfLZ/oxh\n5eQdJdmaZCzJ2Pj4+PAjkSTNypAAWAXc07fvA9bMpibJRuC0qrod+Bzw4qp6NnAycMHkHVXVjqpa\nX1XrR0ZGBh+IJGl2HvEb+BSOAKf07dVMHRpT1iQ5HbgWeGX/2heq6v6+PQY84nKSJOn4GHIGsI+j\nl33WAfuH1CR5DPAh4PKquqt/7X1J1iVZAbwCuGOuA5ckzc+QM4AbgD1JzgDOBy5Osr2qth2jZgPw\neuBc4IokVwDXAW8FPgAE+GhVfXLhDkWSNBszBkBVHU4yCmwGrqmqA0z6zX2KmkN0b/jXTbHLc+Y7\naEnS/A05A6CqDnL0Lp8510iSlg+fBJakRhkAktQoA0CSGmUASFKjDABJapQBIEmNMgAkqVEGgCQ1\nygCQpEYZAJLUKANAkhplAEhSowwASWqUASBJjTIAJKlRg/4egLRcrb3s4/Pafv9VFy7QSKRHH88A\nJKlRBoAkNcoAkKRGGQCS1CgDQJIaZQBIUqMMAElqlAEgSY0yACSpUYMCIMnOJHuTbBtak+RxSW5K\nsjvJR5I8Zui+JEmLb8YASLIFWFFVG4Ezk5w1sObVwDuq6jzgAPCSIfuSJB0fQ84ARoFdfXs3sGlI\nTVW9q6pu6ftGgK8M2VeSrUnGkoyNj48PGJ4kaS6GBMAq4J6+fR+wZjY1STYCp1XV7UP2VVU7qmp9\nVa0fGRkZdBCSpNkbshroEeCUvr2aqUNjypokpwPXAq+cxb4kScfBkADYR3ep5nZgHXDnkJr+Q98P\nAZdX1V2z2JcaM98lnR+tP1taakMC4AZgT5IzgPOBi5Nsr6ptx6jZALweOBe4IskVwHXT1EmSlsCM\nAVBVh5OMApuBa6rqAHDHDDWH6N7wr5u8vynqJElLYNBfBKuqgxy9e2fONbOpkyQtLj+ElaRGGQCS\n1CgDQJIaZQBIUqMMAElqlAEgSY0yACSpUQaAJDXKAJCkRhkAktQoA0CSGmUASFKjDABJapQBIEmN\nMgAkqVEGgCQ1ygCQpEYZAJLUKANAkhplAEhSowwASWqUASBJjTIAJKlRBoAkNcoAkKRGDQqAJDuT\n7E2ybTY1SdYk2TPh+ycn+fckt/ZfI/MbviRprlbOVJBkC7CiqjYm+cMkZ1XVP81UA9wLXA+smlD6\nHODKqrpuAY9B0kBrL/v4vLbff9WFCzQSLQdDzgBGgV19ezewaWDNg8BFwOEJdRuAS5J8Psnbpvph\nSbYmGUsyNj4+PmB4kqS5GBIAq4B7+vZ9wJohNVV1uKoOTaq7iS4svg/YmOScyTuqqh1Vtb6q1o+M\neIVIkhbLkAA4ApzSt1dPs82QGoC/rqr/rqoHgb8BzprFWCVJC2hIAOzj6GWfdcD+OdYA3JzkW5N8\nM3Ae8PeDRypJWlAzfggM3ADsSXIGcD5wcZLtVbXtGDUbptnXW4BPAd8A3l1Vd8596JKk+ZgxAKrq\ncJJRYDNwTVUdAO6YoebQhNdGJ7Q/BXzXgoxckjQvQ84AqKqDHL3LZ841kqTlwyeBJalRBoAkNcoA\nkKRGGQCS1CgDQJIaZQBIUqMMAElqlAEgSY0yACSpUQaAJDXKAJCkRhkAktQoA0CSGmUASFKjDABJ\napQBIEmNMgAkqVEGgCQ1ygCQpEYZAJLUKANAkhq1cqkHIGl21l728aUegk4QngFIUqMMAElqlAEg\nSY0aFABJdibZm2TbbGqSrEmyZ8L3Jye5McltSV43v6FLkuZjxgBIsgVYUVUbgTOTnDWkJslpwPXA\nqgmlbwD2VdXzgFclOXVBjkKSNGtDzgBGgV19ezewaWDNg8BFwOFp6j4NrJ+8oyRbk4wlGRsfHx8w\nPEnSXAwJgFXAPX37PmDNkJqqOlxVh2a7r6raUVXrq2r9yMjIgOFJkuZiSAAcAU7p26un2WZIzWzq\nJEmLbMgb8D6OXvZZB+yfY81s6iRJi2zIk8A3AHuSnAGcD1ycZHtVbTtGzYZp9nU98IkkzweeAXxm\n7kOXJM3HjGcAVXWY7sPb24EXVNUdk978p6o5NOG10Qntu4DNwG3Ai6vqwfkfgiRpLgatBVRVBzl6\n986ca/q6Lw+pkyQtLj+ElaRGGQCS1KgTejno+Sybu/+qCxdwJMO51K+Ws0fj/ylNzzMASWqUASBJ\njTIAJKlRBoAkNcoAkKRGGQCS1CgDQJIaZQBIUqMMAElqlAEgSY0yACSpUQaAJDXKAJCkRhkAktSo\nE3o5aGm5ctlvLQeeAUhSowwASWqUASBJjTIAJKlRBoAkNcoAkKRGGQCS1KhBAZBkZ5K9SbbNpmZy\nX5KVSe5Ocmv/dfb8D0GSNBczBkCSLcCKqtoInJnkrCE102x3DvDBqhrtv/5uYQ9HkjTUkDOAUWBX\n394NbBpYM1XfBuClST7bnx084knkJFuTjCUZGx8fH3gYkqTZGhIAq4B7+vZ9wJqBNVP1fQ54cVU9\nGzgZuGDyjqpqR1Wtr6r1IyMjQ49DkjRLQ9YCOgKc0rdXM3VoTFUzVd8Xqur+vm8MeMTlJEnS8THk\nDGAfRy/7rAP2D6yZqu99SdYlWQG8ArhjLoOWJM3fkDOAG4A9Sc4AzgcuTrK9qrYdo2YDUFP0fQH4\nABDgo1X1yYU7FEnSbMwYAFV1OMkosBm4pqoOMOk39ylqDgFM0XeI7k6gE5pL/UqPtFT/L/ZfdeGS\n/FyY3zEfj3EP+nsAVXWQo3f0DK4Zsp0kaWn4JLAkNcoAkKRGGQCS1CgDQJIaZQBIUqMMAElqlAEg\nSY0yACSpUQaAJDXKAJCkRhkAktQoA0CSGjVoMbgWuaKndGJY7ityLiXPACSpUQaAJDXKAJCkRhkA\nktQoA0CSGmUASFKjDABJapQBIEmNMgAkqVEGgCQ1ygCQpEYZAJLUqEEBkGRnkr1Jts2mZmifJOn4\nmzEAkmwBVlTVRuDMJGcNqRnat7CHI0kaashy0KPArr69G9gE/NOAmmcN7HvYvpJsBbb23x5JcueA\nMZ7Ingjcu9SDWAach47zcNSiz0WuXsy9L9jPnmoenjpkwyEBsAq4p2/fB5w7sGZo38NU1Q5gx4Bx\nNSHJWFWtX+pxLDXnoeM8HOVcdOYzD0M+AzgCnNK3V0+zzVQ1Q/skSUtgyBvwPrpLNQDrgP0Da4b2\nSZKWwJBLQDcAe5KcAZwPXJxke1VtO0bNBqAG9unYvBzWcR46zsNRzkVnzvOQqpq5KDkN2Ax8uqoO\nDK0Z2idJOv4GBYAk6cTjh7CS1CgDQJIaZQAsI0lOS/KJJGNJ3tP3Nbd0RpI1Sfb07ZOT3JjktiSv\nm67vRDRpHr4tya1J/iLJjnSam4cJfc9MckvfbnkebkzyPX171vNgACwvPwG8v3+o49Qkv0ZjS2f0\nNwlcT/fQIMAbgH1V9TzgVUlOnabvhDLFPPwM8HNV9ULgKcDZtDkPJAnwDuDkvqvVeXg18C9V9bd9\n16znwQBYXv4TeGaSx9P9J38aj1w640T3IHARcLj/fpSjc/BpYP00fSeah81DVV1RVV/sX3sC3aP/\nozQ2D72fAj414ftRGpuHJKcDbwcOJnlBXzPKLOfBAFhe/opuDY9fBL4IPIaHL52xZonGddxU1eGq\nOjSha/LyIWum6TuhTDEPACS5CPiHqvoyDc5DkicAPw789oSy5uYB+GXgQ8B7gNckeTlzmAcDYHl5\nM/CzVfVW4B+BH8OlM1xSpJfkTOCNwC/1XS3Ow1XA5VX1wIS+FufhWcDv989S7aL77X/W89DCRD2a\nnAacnWQF8By6f+ytL53hkiL8/zXgDwKvm/CbYHPzAPwAcHWSW4HvSbKdNufhn4Ez+/Z64C7mMA9D\nloLQ8fNbwB/RXQbaC/wOLp1xPfCJJM8HngF8hu40d3Lfie4y4NuAa7vPQHkzU8/NCa2qvuOhdpJb\nq2pbkqfS2DwA1wDvTXIF8DVgC3A6s5wHnwRe5lw6A/oA3ATc/NBvv1P1tch56DgPndnOgwEgSY3y\nMwBJapQBIEmNMgDUtH5JhUzVP8v9fEuS5y3cyKTFZwCoKUmu7tdMWZHknXS3275zitIrk1yQZFWS\nG5KcmuS8CftZneQ3JtS/BvjeaX7mW5O8IMmVSS7r93Vzf7uvtGS8DVStWQm8CvgK8CPAc4GRJGcD\nt1XVFX3dC4HtVfW1JGuBB4Brknyxqv6tqo4keUqSS6rqvXQP7X09yZZ++4NV9cNJVtM9vr8ReBLw\nLXS3+X61qh5MchJAVf3vcTh26WEMALXm16vq/iSXAd8HrKW7be5quqU3SLIZ+HJVfa3f5n+q6utJ\nLgC+Hfi3vv8XgfckuRvYQ3dv/teAp9Pdtw/wOLq1ey4F/hb467799CSf7mtfAXx20Y5YmoYBoGYk\neT1wSZK3Ay8FzqN7eOaxwIuBxya5FLgS+FKS59CFxFOSfJjuzf0Oujd7quqrwI8nuRp4C7AVOEC3\nqN/7+x/7IF3IvB34TrozgHOAK+ie5vyZqvLNX0vCAFAzqmpnkvuB1VW1CSDJ9cDhqnpD//3PAzfR\nvVk/GbgT+Bzwpqr6l8n7TPJe4NL+DOFJdJd+bpxQspIuHH6CbgnjB4C30X1e8A3gS4tysNIAfgis\nZvW/4T8JGE/ytr77D4BrAarqz6rqFuBjwA9Osf2L+rqv93cNPZfuqe2JngpcB/wk3SWijwE/RBcA\nG2lj2QItUwaAmtRf599JdwnmrXTX5N84aZXJh/wp8NokJz10e2iSVXSXii7vay4DPgD8VZK3PLRh\nVd1Gt1rjnwN/TPcHfx4APk937f9zi3KA0gBeAlIz+jtuXkZ3aeeTwCur6u7+5UuAFz1U2n8BUFXj\nSW4Efhf4jyR39i99EFg5xWWk30vyEeBXq+pLwLuBrwLbgLuSPA34buB+4FxgbLGOWToWA0At+Wng\nX+ku8/wC8LIkD9D9acFvAh6fZCXdSqyPnbhhVf1mf9//a4Hv7/8gC0leCtxUVX8yofbSJD9K92c9\nT6O7BPQlutVcn0G34usbgf8APpzkx6b6fEFabC4Gp2YkOWkp7rdPsrKq/qdvBzipqh586PvyP6GW\niAEgSY3yQ2BJapQBIEmNMgAkqVEGgCQ16v8AbZ3iTmdSiDQAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x19296fddcc0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x=[]\n",
    "for i in range(100):\n",
    "    x.append(g(500,10))\n",
    "plt.hist(x,20,normed=True)\n",
    "plt.xlabel(\"迭代次数\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(h)总结下来，随$N$和$d$的增加，运行次数会增加"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 1.5 (Page 35)\n",
    "The perceptron learning algorithm works like this: In each iteration $t$, pick a random $(x(t), y(t))$ and compute the 'signal ' $s(t) = w^T(t)x(t)$.\n",
    "If $y(t).s(t)\\le 0$, update $w$ by\n",
    "$$\n",
    "w(t + 1) = w(t) + y(t) · x(t)\n",
    "$$\n",
    "One may argue that this algorithm does not take the 'closeness' between $s(t)$\n",
    "and $y(t)$ into consideration. Let's look at another perceptron learning algorithm: In each iteration, pick a random $(x(t), y(t))$ and compute $s(t)$. If $y(t) · s(t) \\le 1$, update $w$ by \n",
    "$$\n",
    "w(t + 1) = w(t) + \\eta (y(t)-s(t)).x(t)\n",
    "$$\n",
    "where $\\eta$ is a constant. That is, if $s(t)$ agrees with $y(t)$ well (their product is > 1), the algorithm does nothing. On the other hand, if $s(t)$ is further from $y(t)$, the algorithm changes $w(t)$ more. In this problem , you are asked to implement this algorithm and study its perfrmance.\n",
    "\n",
    "(a) Generate a training data set of size 100 similar to that used in Exercise 1.4.Generate a test data set of size 10, 000 from the same process. To get $g$,\n",
    "run the algorithm above with $\\eta = 100$ on the training data set, until\n",
    "a maximum of 1,000 updates has been reached. Plot the training data\n",
    "set, the target function f, and the final hypothesis g on the same figure.\n",
    "Report the error on the test set.  \n",
    "(b) Use the data set in (a) and redo everything with $\\eta = 1$.  \n",
    "(c) Use the data set in (a) and redo everything with $\\eta = 0.01$.  \n",
    "(d) Use the data set in (a) and redo everything with $\\eta = 0.0001$.  \n",
    "(e) Compare the results that you get from (a) to (d) .  \n",
    "The algorithm above is a variant of the so called Adaline ($Adaptive Linear\n",
    "Neuron$) algorithm for perceptron learning."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)(b)(c)(d)这题的意思就是在更新的时候考虑\"偏离距离\"，并增加一个参数$\\eta $，这里取二维平面上的点，下面通过编程实现一下。尝试的过程中发现$\\eta$取100会导致数太大，所以这里取1,0.1,0.01,0.001"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# -*- coding: utf-8 -*-\n",
    "import random\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus']=False #用来正常显示负号\n",
    "\n",
    "\n",
    "#定义函数GenerateData(n,low,up,w)，生成n组数据,每个分量的下界为low,上界为up,w为目标直线\n",
    "def GenerateData(n,low,up,w):\n",
    "    m=len(w)\n",
    "    data=[]\n",
    "    X1=np.array([])\n",
    "    Y1=np.array([])\n",
    "    X2=np.array([])\n",
    "    Y2=np.array([])\n",
    "    while(len(data)<n):\n",
    "        x=np.array(1)\n",
    "        x=np.append(x,np.random.uniform(low,up,size=m-1))\n",
    "        if(x.dot(w)>=0.1):\n",
    "            X1=np.append(X1,x[1])\n",
    "            Y1=np.append(Y1,x[2])\n",
    "            x=np.append(x,1)\n",
    "        elif(x.dot(w)<=-0.1):\n",
    "            X2=np.append(X2,x[1])\n",
    "            Y2=np.append(Y2,x[2])\n",
    "            x=np.append(x,-1)\n",
    "        data.append(np.array(x))\n",
    "    return data,X1,Y1,X2,Y2\n",
    "\n",
    "\n",
    "#定义函数Adaline(n,m,k,w0,low,up,iteration=1000)，n组训练数据，m组测试数据，参数为k,w0为目标函数，iteration为迭代次数,\n",
    "#数据每个分量下界为low,上界为up\n",
    "def Adaline(n,m,k,w0,low,up,iteration=1000):\n",
    "    d=len(w0)\n",
    "    #首先生成n组训练数据\n",
    "    data,X1,Y1,X2,Y2=GenerateData(n,low,up,w0)\n",
    "    #测试数据集\n",
    "    test=GenerateData(m,low,up,w0)[0]\n",
    "    \n",
    "    #定义sign函数\n",
    "    def sign(x):\n",
    "        if x>=0:\n",
    "            return 1\n",
    "        else:\n",
    "            return -1\n",
    "    \n",
    "    #定义判别函数，判断所有数据是否分类完成\n",
    "    def Judge(x,w):\n",
    "        flag=1\n",
    "        for i in x:\n",
    "            if sign(i[:d].dot(w))*i[-1]<0:\n",
    "                flag=0\n",
    "                break\n",
    "        return flag\n",
    "    \n",
    "    #记录次数\n",
    "    T=0\n",
    "    #初始化w,注意这里不能初始化为0\n",
    "    w=np.ones(d)\n",
    "    while(Judge(data,w)==0 and T<iteration):\n",
    "        i=data[random.randint(0,n-1)]\n",
    "        s=i[:d].dot(w)\n",
    "        a=s*i[-1]\n",
    "        if a<=1:\n",
    "            w+=k*(i[-1]-s)*i[:d]\n",
    "            T+=1\n",
    "    \n",
    "    #计算错误率\n",
    "    error=0\n",
    "    #print(type(test))\n",
    "    for i in test:\n",
    "        if sign(i[:3].dot(w))*i[-1]<0:\n",
    "            error+=1\n",
    "    print(\"n为\"+str(k)+\"时错误率为\"+str(error/m))\n",
    "    \n",
    "    #直线方程为w0+w1*x+w2*y=0,根据此生成点\n",
    "    X3=np.arange(low,up,0.01)\n",
    "    Y3=np.array([(X3[i]*w[1]+w[0])/(-w[2]) for i in range(len(X3))])\n",
    "\n",
    "    #目标函数\n",
    "    X4=np.arange(low,up,0.01)\n",
    "    Y4=np.array([(X3[i]*w0[1]+w0[0])/(-w0[2]) for i in range(len(X4))])\n",
    "\n",
    "    #画出图片\n",
    "    plt.scatter(X1,Y1,c='r',s=1)\n",
    "    plt.scatter(X2,Y2,c='b',s=1)\n",
    "    plt.plot(X3,Y3,label=\"(\"+str(w[0])+\")+(\"+str(w[1])+\")x+(\"+str(w[2])+\")y=0\")\n",
    "    plt.plot(X4,Y4,label=\"(\"+str(w0[0])+\")+(\"+str(w0[1])+\")x+(\"+str(w0[2])+\")y=0\")\n",
    "    plt.title(u\"经过\"+str(T)+u\"次迭代\")\n",
    "    #设置坐标范围\n",
    "    #plt.xticks(np.arange(0,10))\n",
    "    #plt.yticks(np.arange(0,10))\n",
    "    plt.legend()\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n为1时错误率为0.1369\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nJ19PuO9j4wAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1bfb4551be0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "Adaline(1000,10000,1,np.array([1,-1,-1]),0,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n为0.1时错误率为0.0576\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nyy+/vPD68aR06dIoX748gIvXllT0mPWyP+G6Yryx71QGn/hqJaNi4vjapPU8kZ5V5Hc7uWLefvtt\nnjt3rsi23r1789dff/W5T2pqKu+++24mJSUV2e7+CPn0008XPtK9//77XLhwIV9//XWuXbu2SFpv\n20jywIEDbNKkCdPT00mSHTp04IkTJ0hqroGff/7Za7kkmZiYWOQR9aabbir83r17d86ePZsPPfQQ\n09PTuXTp0iKumO7du/PYsWNF8vPmisnPz+err77qpXUupaCggPXr1w863bx58/jpp58W/p+dnV34\n/c4772RKSgobNmxY6DoaN24cR48ezQ4dOjAxMfGSdli7di1btGjB3NxckpoLwEX79u25Z88er/m5\nl9upUycmJCR4Pb/u6T744APOmDGDpNbfBw0aVORYN2zYwNKlSzMtLa3Idm+uGG991BNffdKTgoIC\nNm3a1Ku7wdXvu3TpwrNnz5LU+to333zD9957j/Pnzy88HpdLZsWKFezQoQMHDBhQJC/PPuniX//6\nV2F/97XNfV9v58jX+R03bhxXrVpV+P/Zs2fZvHlzjhkzhj/99JNPV8y9995buM/7779fJA8X4bhi\nItpid6dutasx4+1/one7W7HqQAoe+WIZpm04bEvrvW3btpg5cyaGDh2KKVOmANAGU1yuE09yc3Px\nzDPPYMiQIYiKivKZb2JiIo4cOYLs7Gxs2rQJQggsW7YMMTExiI6OxpYtW9C7d2+v29LS0vDCCy9g\n4sSJhdbP3XffjZUrtTWit27dimDm0K9WrRpSUlJAEhs3bkTFihVx+vRpdOzYEf/9738xefJkzJgx\nA/n5+UhKSsINN9xQZP/o6OhLBvVKlSoFIQTOnvX9qkTz5s2RlpaGnJycSywxPel+++23Qivt7Nmz\naNWqFfLy8rBr1y5kZGSgSpUqqFu3LhITEwEACQkJqFixIvbu3YtXX30Vzz//PBYsWICxY8ciKSkJ\n7777Ln755ZfCp7Ft27YhPT0d6enp2LFjB4QQl+QXFRWF5s2bIzMzE6dOncLmzZsL03ie39atW+PE\niRO4cOECFi1ahEaNGhUex+OPP17kmAcOHIhPPvnkkgE/b4PUrj7qC719EgBWrFiB++67r9Bq9tbv\n09LSsH37dhQUFGDdunWF7eIKKXS1CwDccccdOHz4MD788EOfZb7zzjtYvnx5kTK8bfOG5zk6ceKE\n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\nAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1bfb5a3f6a0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "Adaline(1000,10000,0.1,np.array([1,-1,-1]),0,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n为0.01时错误率为0.0899\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nBYhNAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1bfb5b58a90>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "Adaline(1000,10000,0.01,np.array([1,-1,-1]),0,1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "n为0.001时错误率为0.3984\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nw/fffw8A2Lx5Mzp16gRAmjz95Zdf8NFHH/lM179/fyxfvhw33HADtm/fjs6dOyumKykpwc6dO9Gn\nTx98//33iIuLw+OPP47hw4dj4sSJWLFiBUaMGIHc3Fy89dZbePPNN1FaWtrEYvRmxYoVTSYh3ShN\nJl511VVYtmwZZs+erVhmX3jXldJ1qEW+wmjbtm3461//qvqzefPmedrDTTfd5PMckyZNwoIFC9C1\na1fU1taiefPmiukcDgcOHTrUZERy+PBh/Prrr0hJScG2bds8E85ZWVlnHB8dLa2BLysrQ0pKClJT\nU3HixAm0bdsWBw4caOLikbNlyxY899xzno69pqYGO3bsQF1dHYqKipCfn++xkpcvX44///nPACS3\n0ZVXXol169Zh//79TVwppaWlAIBff/0VQggcOnQI995zNz799FOc1y4VjU4nBmaOxvuffI7jv5/E\n1m1b0ZjUFntPVCApIQaNTvKMEIcNG4Z169ahqqoKW7duRbdu3RAdHX1G3efn5+PIkSNIT0/Hzz//\njAkTJqCkpAQ33ngjFi9ejJSUFM81f/zxx3j66ac9/0dFReGyyy7DQw89hLVr1wKA4iqxEydOYOPG\njbjuuuuwfft2nyMAW6DGsS9/AWgJ4AsAPwdI9wCAOa73qwEk+Utv9wlap9NJ119/PR0+fJj69OlD\n999/P2VkZFBpaSn9+uuv9PjjjzdJX1ZWdka6nTt30kUXXUQXXnghPfbYY2ecwz0JtXr1aoqPj/dM\nBL388svkcDjo9ttvp+HDh1Pfvn1px44dRES0ePHiJhOgSukaGxtpyJAhdO+991KPHj3o4MGDiun2\n799PmZmZlJiYSAMHDqSjR4/S8ePHaeDAgXTBBRfQ7bffTvX19UREdOedd9LgwYPpyiuvpKKiIs/5\np02b5pmgLSwspOuvv56cTqfqer799ttpz549imUuLi6m2267rUl6pbpSug7vOlaqdzWfB/rslltu\nUZzok6f58ccfKTMzk4YMGUJvvvmm5/P8/PwmE7TPPPOMZ8LazYQJE2jTpk20f//+JpPrvtixYwfN\nnDmTiIg+/vhjGjRoEE2dOtXz2YIFC2jDhg1Njhk4cCBlZGR46rS0tJSeeuopatOmDbVq1YpefPFF\nT9revXtTY2Oj5/8FCxZQt27dKDMzk3JycoiI6M0336Rzzz2XkpOT6b777iMioilTplDnzp0958jL\ny6OlS5dSt27dqG/fvvSfpcuosNw1yXuklAYMGkq/HCulwyer6J/v/NuT7oMPPvBZ9ytXrqQuXbpQ\nixYt6IYbbiCHw0EPP/wwtWvXznPenJwc2rBhwxnPLxHRli1bKCsry2/9Hjp0iHr37k333nsvDRgw\nQPF+2GWCVo/YJwNIARqhwT8AAAt5SURBVJATIN2nAHq73j8KYJS/9HYXeyKiI0eO0HvvvUenTp2i\nZcuW0e+//+43vdp0oaC6upo++OADOnDgQMjO+d5779Fvv/2m6ZiysjJ67bXXiMiaMtuFmpoaevnl\nlw3Ja8mSJXT8+HEiItq2bRt98sknTQTa7jgaG6m0qo5+K66iX4+V0fYjJbTjSAntL6iggrIaqq53\naDIovFmwYIHHiHHzzTffUL9+/c7obJU4duwYLVu2zLPCyhu7iH3AjdCEEK8DkPsq1hLRXCFEDhFl\n+TluDYBriKhMCDEDQDkRve+VZgaAGQDQsWPH/ocPH26Sx+7duz0z5wzDMESEmgbX/j01DahpkH68\n1Sw6Ckmu/XtaxMXYap9+s3XMsI3QiOiOQGl8UAkgAUAZgBau/73zfgPAG4C066XO8zAMEyEIIZDY\nLAaJzWLQLjkeDY1OVNQ2oLzGgZLqBhRX1SNKCLSIi/GIf7MYXmEOmLsaZwuAYQBWALgYwCYTz8Uw\nTAQSGx2FVs3j0Kp5HJxOQlW9tGNneW0DyksbANQgPjYayS7hT2wWuRu3GSL2QohsSP75V2Uf/wvA\naiHEcAC9AfxgxLkYhmGUiIoSrm2YY3EOxaPO4bL6ax0oqqhHYUUdYjxpYtAiLgYxEbRds26xl/vr\niWgtgLVe3x8WQlwGybp/gojCZ2ckhmHCGiHcwVeikZYEOBqdqKyTrP6K2gaUVNdDQCAxLhpJ8TFI\njo8964O0mNqtEdFxIlpORGWBU4cHSr9y1LNFan19PY4dO6Y6vVHbsJaWljbZWM0fZOA2uwxjJTHR\nUUhNbIYOrRLR65xknJ/WAmlJ0p79J8pqsbegAntOVOBYaQ0qahvgDNPtmv0ROWMYA/C1xbGeLVJn\nzZqFI0eOqE4/Z84c7NmzR9M5vCEizJw5E6dOnVKV3qhtdhnGTggh0DwuBu1S4tGjbRIy2iXjvNQE\nxMdGo6SqHvknpe2aD52sQnFVHRoc2nfDtCMs9iqRb3HsvS2uvy1Slbbyzc3NRXp6ut9f23lv67pw\n4ULPNq1qyjpnzpwzPn///fcxbtw4z54zSgSzza43arfUZRgraRYThdYt4tC5TXP0PicZnds0R8vE\nZqhtaMSxkhrsPlGOfQUVOFFWi2pXqMZwhPfGUcm///1vzJw5EyUlJZg2bVqTYBAxMTEYPXo0vvvu\nO8W90b1ZsmQJ5s+f7/P7AwcOYNasWaisPL1aNTU1Fe3bt8dvv/2Gjh076rqGVatWYcmSJT6/37Rp\nE5588skm+Xft2hWVlZWoqanxucdNfn7+GZu4Pf/885g3bx5eeOEFDBgwANdffz0+//xzXeVmmFAR\nFSWQHB+L5PhYkGuSt7y2ARU1DhRV1KKwAoiJcq/pl17RUeFhM4eP2H/+KHBiZ+B0Wmh3ETDOt+jK\ncW9xXF5ejmXLljWxugFpi9QNGzZ4xP6aa67BqVOnkJeXh6ysLEydOhV33XUXAHg2TvKFe1tX96ZS\nbi699FJs27bNI8ZPP/00UlJSMGnSJEyZMgU5OTm4/PLLUVtbixMnTiAnJwd//vOfMXnyZABSpxTl\np2G6t9mdO3duk8/d2+z26dMHRIRLLrkEmzZtQnx8PC655BLk5uYiJyfnjPzcW+oC8GypK984jGHs\njHySN102yVvuWtrpnuRtHhftWeFj50ne8BF7m6C0LS5w5hap7o3JlLbylaO0k96MGTN8nkOedtas\nWRg9ejQ2bNiAl156CXFxcZ6tbt955x1FVw4gdTbjxo1r8tkDDzyAiRMnBtxmVwiBCRMmYNWqVejQ\noQMyMzMRHx+veB6tW+oyjJ1xT/KmJjYDEaG6vtETjP33shr8Xia5hNzB2JvHxSDKRsIfPmKv0gI3\nC/kWx0p4b5HqD6fTKe1VIYSmeKv5+fm4+OKLPf83a9YMkyZNwrJlyzB48OCAxzc2SqtfExISFC1x\nf+eVb7N7yy234C9/+Qs6deqEadOm+XTjaNlSl2HCCfckb/O4GJyTAtQ7Gl0/5nKguKoeJyvrECUE\nkuJjUFXnQGFFLdKTlI2iUBEeziYb4N7i2Bcff/wxxo4de8bnSlZ9ZmamrgDHOTk5nkhOgBSz9cMP\nP0SfPn3w2WefeT7v3LmzolXfrl07zUs4lbbZ7d69O4qLi/Hjjz9i6NCh6NKlS5MIPjk5ORg4cKBn\nS10i8rulLsOEO81iotG6RRy6uCd5WzdHamIsqusbUVLdgIFPr8HEVzfi5W/2YsfRUkuWdrLYq+Sq\nq67CqlWrUFhYeMZ3GzduRFpamifEWSBuv/12vPLKK6iurlZ9/qVLlyI7OxvR0dGezx577DHcf//9\nePHFFzFnzpwmE7pKPPTQQ3j88cc1WdgvvPDCGVY7AEyYMAFjxozxe+zMmTMxefJk3HjjjRg1ahT7\n65mIIDpKIDkhFu1bJiKjXRLaJsdh1uU9ERMl8MqafZj46ne49Nk1WLXj99AWTM3WmKF4hdMWx94o\nbZEaiO3bt9MXX3yhOv1zzz2nKX9ffPnll7R161ZVaX1ts/viiy9SZmYmHTt2LGAe4bilLsMYiVzH\nTlbU0odbjtDM97bQ5kPFhuQPo7Y4DhUDBgwg72C9vMUxwzDhjl22OGY3DsMwTARge7G3y8iDYRhG\nK3bSL1uLfXx8PIqLi21VYQzDMGogIhQXF/v8HUqosfU6+/bt2+Po0aO8ERfDMGFJfHw82rdvb3Ux\nANhc7GNjY9GlSxeri8EwDBP22NqNwzAMwxgDiz3DMEwEwGLPMAwTAdjmR1VCiCIAh4PIog2AkwYV\nJ1yItGuOtOsF+JojhWCuuRMRBdx4yjZiHyxCiM1qfkV2NhFp1xxp1wvwNUcKobhmduMwDMNEACz2\nDMMwEcDZJPZvWF0AC4i0a4606wX4miMF06/5rPHZMwzDML45myx7hmEYxgdhJ/ZCiLeEELlCiL8G\nkyZcCHQtQogUIcTnQoivhBD/FUI0C3UZjUbt/RNCtBVCbA1VucxEwzUvEkJMCFW5zERF224phFgt\nhNgshHg91OUzA1eb3eDn+1ghxGdCiO+EEH808txhJfZCiGsARBPRYABdhRDd9aQJF1Rey00AXiKi\nsQBOALgilGU0Go3370UACaEpmXmovWYhxHAA7YjoM6XvwwmV13wzgPdcSxKThBBhvRxTCNESwL8A\nNPeT7B4AW4hoKIDrhBBJRp0/rMQeQBaA5a73XwEYpjNNuJCFANdCRIuI6GvXv2kAzgySG15kQcX9\nE0JkA6iC1MGFO1kIcM1CiFgA/wRwSAgxKXRFM40sBL7PxQAuFEKkAugA4EhoimYajQCmAij3kyYL\np+tlPQDDOrhwE/vmAI653p8C0FZnmnBB9bUIIQYDaElEm0JRMBMJeM0uV9XfADwawnKZiZr7fAuA\nXQCeBzBQCHFPiMpmFmqueSOATgDuBbDblS5sIaJyIioLkMw0/Qo3sa/E6WF7CyiXX02acEHVtQgh\nWgH4OwBDfXwWoeaaHwWwiIhKQ1Yqc1FzzZcAeIOITgB4F8CoEJXNLNRc82wAdxLRXAB5AG4NUdms\nxDT9Cjch3ILTw72LARzSmSZcCHgtLiv3AwB/IaJg9hayC2ru3xgAM4UQOQD6CiHeDE3RTEPNNe8H\n0NX1fgCC20fKDqi55pYALhJCRAO4FEAkrBM3T7+IKGxeAJIBbAfwEqRh3cUA5gVIk2J1uU2+3rsA\nlADIcb2mWl1us6/ZK32O1WUO0X1OgtSprweQC+A8q8sdgmseCOBXSNbu1wBaWF1ug649x/U3G8Dd\nXt91cl3zKwB+gjSJbch5w+5HVa4Z7csArCdpSKsrTbhwNl2LWvia+ZojGSHEuZCs+y8psI9ffb7h\nJvYMwzCMdsLNZ88wDMPogMWeYRgmAmCxZxiGiQBY7BmGYSIAFnuGYZgIgMWeYRgmAvj/XCvgU1IN\nBTwAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1bfb5bd46d8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "Adaline(1000,10000,0.001,np.array([1,-1,-1]),0,1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(f)可以看到除了$\\eta=0.001$的情形，其余几种错误率都很低，推测是因为$\\eta=0.001$时，步长太小，需要更多的迭代。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "#### Problem 1.6 (Page 35)\n",
    "Consider a sample of 10 marbles drawn independently from a bin that holds red and green marbles. The probability of a red marble is $\\mu$.For $\\mu = 0.05, \\mu = 0.5,$ and $\\mu = 0.8$, compute the probability of getting no red\n",
    "marbles $( v = 0)$ in the following cases.  \n",
    "(a) We draw only one such sample. Compute the probability that $v = 0$.  \n",
    "(b) We draw 1, 000 independent samples. Compute the probability that (at least) one of the samples has $v = 0$.  \n",
    "(c) Repeat ( b) for 1 , 000, 000 independent samples. "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)抽出10个样本，$v=0$的概率为$P_0=(1-\\mu)^{10}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(b)重复(a)1000次，至少有一次出现$v=0$的概率为$P_1=1-(1-P_0)^{1000}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(c)重复(a)1000,000次，至少有一次出现$v=0$的概率为$P_2=1-(1-P_0)^{1000000}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 1.7 (Page 36)\n",
    "A sample of heads and tails is created by tossing a coin a number of times independently. Assume we have a number of coins that generate different samples independently. For a given coin , let the probability of heads (probability of error) be $\\mu$. The probability of obtaining $k$ heads in $N$ tosses of this coin is given by the binomial distribution:\n",
    "$$\n",
    "P[k|N,\\mu]=\\binom{N}{k}\\mu ^k(1-\\mu)^{N-k}\n",
    "$$\n",
    "Remember that the training error $v$ is $\\frac k N$.  \n",
    "\n",
    "(a) Assume the sample size $(N)$ is $10$. If all the coins have $\\mu = 0.05$. Compute the probability that at least one coin will have $v = 0$ for the case of 1 coin, 1,000 coins, 1,000,000 coins. Repeat for $\\mu = 0.8$.  \n",
    "(b) For the case $N = 6$ and $2$ coins with $\\mu = 0.5$ for both coins, plot the probability\n",
    "$$\n",
    "P[ {max}_i |v_i - \\mu _i| >\\epsilon]\n",
    "$$\n",
    "for $\\epsilon$ in the range $[0, 1]$ (the max is over coins) . On the same plot show the bound that would be obtained using the $Hoeffding\\ Inequality$. Remember that for a single coin, the Hoeffding bound is\n",
    "$$\n",
    "P[| \\mu-v|>\\epsilon]\\le 2e^{-2\\epsilon ^2N}\n",
    "$$\n",
    "[Hint: Use $P[A\\ or\\ B] = P[A] + P[B]-P[A\\ and\\ B] = P[A] + P[B] -\n",
    "P[A]P[B]$, where the last equality follows by independence, to evaluate P[max . . .]]\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)这题和上一题应该是差不多的意思，和上一题的(c)稍有不同。这里$P_i$表示$i$个硬币时至少出现一次$v=0$的概率  \n",
    "$$\n",
    "P_1=(1-\\mu)^{10}\n",
    "\\\\P_{1000}=1-(1-P_1)^{1000}\n",
    "\\\\P_{1000000}=1-(1-P_1)^{1000000}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(b)注意$v=\\frac k N，N=6$且有两枚硬币。因此\n",
    "$$\n",
    "\\begin{aligned}\n",
    "P[ {max}_i |v_i - \\mu _i| >\\epsilon]&=1-P[ {max}_i |v_i - \\mu _i| \\le\\epsilon]\n",
    "\\\\&=1-(P[|v - \\mu| \\le\\epsilon])^2\n",
    "\\\\&=1-(P[|\\frac k N - 0.5| \\le\\epsilon])^2\n",
    "\\\\&=1-(P[|k-3|\\le 6\\epsilon])^2\n",
    "\\\\&=1-(P[3-6\\epsilon\\le k \\le 3+6\\epsilon])^2\n",
    "\\\\&=1-(\\sum_{3-6\\epsilon\\le k \\le 3+6\\epsilon}\\binom{N}{k}\\mu ^k(1-\\mu)^{N-k})^2\n",
    "\\end{aligned}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n5agcRESknP8PKDMrfLudQNEAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x240a96525c0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# -*- coding: utf-8 -*-\n",
    "import random\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import math\n",
    "from scipy.special import comb\n",
    "plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签\n",
    "plt.rcParams['axes.unicode_minus']=False #用来正常显示负号\n",
    "\n",
    "def Pmax(N,x,u):\n",
    "    low=int(3-6*x)\n",
    "    up=int(3+6*x)\n",
    "    s=0\n",
    "    for k in range(low,up+1):\n",
    "        s+=comb(N,k)*(u**k)*((1-u)**(N-k))\n",
    "    return 1-s**2\n",
    "\n",
    "x=np.arange(0,1,0.01)\n",
    "y1=np.array([Pmax(6,i,0.5) for i in x])\n",
    "y2=np.array([2*math.exp(-2*6*(i**2)) for i in x])\n",
    "\n",
    "plt.plot(x,y1,label=\"Pmax\")\n",
    "plt.plot(x,y2,label=\"Hoeffding\")\n",
    "plt.xlabel(\"eplison\")\n",
    "plt.ylabel(\"P\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 1.8 (Page 36) \n",
    "The Hoeffding Inequality is one form of the $law\\ of\\ large\\ numbers$. One of the simplest forms of that law is the $Chebyshev\\ Inequality$,which you will prove here.\n",
    "\n",
    "(a) If $t$ is a nonnegative random variable, prove that for any $\\alpha > 0$,$P[t \\ge \\alpha] \\ge \\frac {E(t)}\\alpha$  \n",
    "(b) If $u$ is any random variable with mean $\\mu$ and variance $\\sigma ^2$ , prove that for any $\\alpha > 0, P[(u-\\mu)^2\\ge \\alpha]\\le \\frac{\\sigma^2}\\alpha$  [Hint: Use (a)]  \n",
    "(c) If $u_1 ,..., u_N$ are iid random variables, each with mean $\\mu$ and variance $\\sigma^2$ ,and $u = \\frac 1 N \\sum_{n=1}^N{u_n}$ , prove that for any $\\alpha > 0$,  \n",
    "$$\n",
    "P[(u-\\mu)^2\\ge \\alpha]\\le \\frac{\\sigma^2}{N\\alpha}\n",
    "$$\n",
    "Notice that the RHS of this Chebyshev Inequality goes down linearly in N,while the counterpart in Hoeffding's Inequality goes down exponentially. In Problem 1 .9, we develop an exponential bound using a similar approach."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这题是有关切比雪夫不等式的，下面分别证明下  \n",
    "(a)\n",
    "$$\n",
    "\\begin{aligned}\n",
    "P[t \\ge \\alpha]&=\\int _{\\alpha}^{+\\infty}f(t)dt\n",
    "\\\\&\\le\\int _{\\alpha}^{+\\infty}\\frac t \\alpha f(t)dt\\ (注意t\\ge \\alpha)\n",
    "\\\\&=\\frac{\\int _{\\alpha}^{+\\infty}t  f(t)dt} \\alpha\n",
    "\\\\&=\\frac {E(t)}\\alpha\n",
    "\\end{aligned}\n",
    "$$\n",
    "(b)在(a)中取$t=u-\\mu$，注意此处$u$是随机变量，且\n",
    "$$\n",
    "E(u)=\\mu,Var(u)=E(u-\\mu)^2=\\sigma^2\n",
    "$$\n",
    "所以由(a)\n",
    "$$\n",
    "P[(u-\\mu)^2\\ge \\alpha]\\le \\frac {E((u-\\mu)^2)}\\alpha=\\frac{\\sigma^2}\\alpha\n",
    "$$\n",
    "(c)\n",
    "由随机变量的性质可得\n",
    "$$\n",
    "E(u) = E(\\frac 1 N \\sum_{n=1}^N{u_n})=\\frac 1 N\\sum_{n=1}^NE(u_n)=\\mu\n",
    "\\\\Var(u)=Var(\\frac 1 N \\sum_{n=1}^N{u_n})=\\frac 1 {N^2}Var(\\sum_{n=1}^N{u_n})=\\frac 1 {N^2}N\\sigma^2=\\frac {\\sigma^2}N\n",
    "$$\n",
    "带入(b)可得\n",
    "$$\n",
    "P[(u-\\mu)^2\\ge \\alpha]\\le \\frac{\\sigma^2}{N\\alpha}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "#### Problem 1.9 (Page 37)\n",
    "In this problem, we derive a form of the law of large numbers that has an exponential bound, called the $Cheroﬀ\\ bound$. We focus on the simple case of flipping a fair coin, and use an approach similar to Problem 1.8.  \n",
    "\n",
    "(a) Let $t$ be a (finite) random variable, $\\alpha$ be a positive constant, and $s$ be a positive parameter. If $T(s) = E_t(e^{st})$ , prove that\n",
    "$$\n",
    "P[t \\ge \\alpha] \\le e^{-s\\alpha}T(s)\n",
    "$$\n",
    "[Hint: $e^{st}$ is monotonicaly increasing in $t$.]  \n",
    "(b) Let $u_1 , · · · , u_N$ be iid random variables, and let $u = \\frac 1 N \\sum_{n=1}^N{u_n}$. If $U(s) = E_{u_n} (e^{su_n} ) $(for any n),prove that  \n",
    "$$\n",
    "P[u \\ge \\alpha] \\le (e^{-s\\alpha}U(s))^N\n",
    "$$\n",
    "(c) Suppose $P[u_n = 0] = P[u_n = 1] = \\frac 1 2$ (fair coin). Evaluate $U(s)$ as a function of $s$, and minimize $e^{-s\\alpha}U(s)$ with respect to $s$ for fixed $\\alpha,0 < \\alpha < 1$.  \n",
    "(d) Conclude in (c) that, for $0 < \\epsilon< \\frac 1 2$ .\n",
    "$$\n",
    "P[u\\ge E(u)+\\epsilon]\\le 2^{-\\beta N }\n",
    "$$\n",
    "where $\\beta= 1 + (\\frac 1 2 + \\epsilon)log_2(\\frac 1 2 + \\epsilon) + (\\frac 1 2 - \\epsilon)log_2(\\frac 1 2 - \\epsilon)$ and $E(u) = \\frac 1 2 $·\n",
    "Show that ( $\\beta> 0$, hence the bound is exponentially decreasing in $N$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)\n",
    "$$\n",
    "\\begin{aligned}\n",
    "P[t \\ge \\alpha]&=\\int _{\\alpha}^{+\\infty}f(t)dt\n",
    "\\\\&\\le\\int _{\\alpha}^{+\\infty}\\frac {e^{st}} {e^{s\\alpha}} f(t)dt\\ (注意t\\ge \\alpha,s>0)\n",
    "\\\\&={e^{-s\\alpha}}{\\int _{\\alpha}^{+\\infty}{e^{st}}  f(t)dt} \n",
    "\\\\&\\le{e^{-s\\alpha}}{\\int _{-\\infty}^{+\\infty}{e^{st}}  f(t)dt} \n",
    "\\\\&=e^{-s\\alpha}E_t(e^{st})\n",
    "\\\\&=e^{-s\\alpha}T(s)\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "(b)令$U_N=\\sum_{n=1}^N{u_n}$，因此$u=\\frac 1 N U_N$  \n",
    "所以\n",
    "$$\n",
    "\\begin{aligned}\n",
    "P[u \\ge \\alpha]&=P(\\frac 1 N \\sum_{n=1}^N{u_n} \\ge \\alpha)\n",
    "\\\\&=P(\\sum_{n=1}^N{u_n}\\ge N\\alpha)\n",
    "\\\\&\\le  e^{-sN\\alpha}E(e^{s\\sum_{n=1}^N{u_n}})(由(a))\n",
    "\\\\&=e^{-sN\\alpha} \\prod _{n=1}^NE(e^{su_n})(由独立性)\n",
    "\\\\&=e^{-sN\\alpha} (U(s))^N\n",
    "\\\\&=(e^{-s\\alpha}U(s))^N\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "(c)由定义知$U(s)=\\frac 1 2 e^s+\\frac 1 2$，所以$f(s)=e^{-s\\alpha}U(s)=\\frac 1 2(e^{(1-\\alpha)s}+e^{-s\\alpha})$\n",
    "现在需要对固定的$\\alpha$求$U(s)$的最小值\n",
    "$$\n",
    "f^{'}(s)=\\frac 12[(1-\\alpha)e^{(1-\\alpha)s}-\\alpha e^{-s\\alpha} ]\n",
    "\\\\f^{''}(s)=\\frac 12[(1-\\alpha)^2e^{(1-\\alpha)s}+{\\alpha}^2 e^{-s\\alpha} ]>0\n",
    "$$\n",
    "所以当$f^{'}(s)=0$时，$f(s)$取到最小值。令$f^{'}(s)=0$得\n",
    "$$\n",
    "\\frac 12[(1-\\alpha)e^{(1-\\alpha)s}-\\alpha e^{-s\\alpha} ]=0\n",
    "\\\\e^s=\\frac \\alpha {1-\\alpha}\n",
    "\\\\s=ln(\\frac \\alpha {1-\\alpha})\n",
    "$$\n",
    "因此\n",
    "$$\n",
    "\\begin{aligned}\n",
    "minf(s)&=f(ln(\\frac \\alpha {1-\\alpha}))\n",
    "\\\\&=\\frac 1 2(\\frac \\alpha {1-\\alpha})^{-\\alpha}(\\frac \\alpha {1-\\alpha}+1)\n",
    "\\\\&=\\frac 1 2 \\frac {\\alpha ^{-\\alpha}}{(1-\\alpha) ^{-\\alpha+1}}\n",
    "\\end{aligned}\n",
    "$$\n",
    "因为$P[u \\ge \\alpha] \\le (e^{-s\\alpha}U(s))^N$对任意$s$均成立\n",
    "所以\n",
    "$$\n",
    "P[u \\ge \\alpha] \\le min(e^{-s\\alpha}U(s))^N=(\\frac 1 2 \\frac {\\alpha ^{-\\alpha}}{(1-\\alpha) ^{-\\alpha+1}})^N\n",
    "$$\n",
    "\n",
    "(d)$P[u\\ge E(u)+\\epsilon]=P[u\\ge \\frac 1 2+\\epsilon]$，在(c)的不等式中取$\\alpha =\\frac 1 2 +\\epsilon$得\n",
    "$$\n",
    "\\begin{aligned}\n",
    "P[u\\ge \\frac 1 2+\\epsilon]&\\le(\\frac 1 2 \\frac {(\\frac 1 2+\\epsilon) ^{-(\\frac 1 2+\\epsilon)}}{(\\frac 1 2-\\epsilon) ^{\\frac 1 2-\\epsilon}})^N\n",
    "\\\\&=2^{(-1-(\\frac 1 2+\\epsilon){log}_2(\\frac 1 2+\\epsilon)-(\\frac 1 2-\\epsilon){log}_2{(\\frac 1 2-\\epsilon)})N}\n",
    "\\\\&=2^{-\\beta N}\n",
    "\\end{aligned}\n",
    "$$\n",
    "下面证明\n",
    "$$\n",
    "\\beta=\\beta(\\epsilon)= 1 + (\\frac 1 2 + \\epsilon)log_2(\\frac 1 2 + \\epsilon) + (\\frac 1 2 - \\epsilon)log_2(\\frac 1 2 - \\epsilon)>0\n",
    "$$\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\frac {d \\beta}\\epsilon&=log_2(\\frac 1 2 + \\epsilon)+1-log_2(\\frac 1 2 - \\epsilon)-1\n",
    "\\\\&={log}_2 \\frac {\\frac 1 2 + \\epsilon} {\\frac 1 2 - \\epsilon}>0\n",
    "\\end{aligned}\n",
    "$$\n",
    "因此$\\beta$关于$\\epsilon$递增，故$\\beta>\\beta(0)=0$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 1.10 (Page 37)\n",
    "Assume that $X = \\{x_1 , x_2, . . . , x_N, x_{N+1} , . . . , x_{N+M}\\}$\n",
    "and $Y = \\{-1, +1\\}$ with an unknown target function $f : X \\to Y$. The training\n",
    "data set $D$ is $(x_1 , y_1) , . .  , (x_N, y_N)$ . Define the $off-training-set$ error of a\n",
    "hypothesis h with respect to $f$ by\n",
    "$$\n",
    "E_{oﬀ} (h, f) =\n",
    "\\frac 1 M  \\sum_{m=1}^M[\\![h(x_{N+m}) \\neq f(x_{N+m})]\\!]\n",
    "$$\n",
    "\n",
    "(a) Say $f(x) = +1$ for all $x$ and\n",
    "$$\n",
    "h(x) = \\begin {cases}\n",
    "+1, for\\ x = x_k\\ and\\ k\\ is\\ odd\\ and\\ 1\\le k\\le M + N\n",
    "\\\\-1,otherwise\n",
    "\\end {cases}\n",
    "$$\n",
    "What is $E_{oﬀ} (h, f)$?  \n",
    "(b) We say that a target function $f$ can 'generate' $D$ in a noiseless setting\n",
    "if $y_n = f(x_n)$ for all $(x_n, y_n)\\in D$ . For a fixed $D$ of size $N$, how many possible $f : X \\to Y$ can generate $D$ in a noiseless setting?\n",
    "(c) For a given hypothesis $h$ and an integer $k$ between $0$ and $M$, how many\n",
    "of those $f$ in (b) satisfy $E_{oﬀ} (h, f)=\\frac k M$ ?  \n",
    "( d) For a given hypothesis $h$, if all those $f$ that generate $D$ in a noiseless setting are equally likely in probability, what is the expected off trainingset error $E_f[E_{oﬀ} (h, f)]$?  \n",
    "(e) A deterministic algorithm $A$ is defined as a procedure that takes $D$ as an input, and outputs a hypothesis $h = A(D)$. Argue that for any two deterministic algorithms $A_1$ and $A_2$\n",
    "$$\n",
    "E_f[E_{oﬀ} (A_1(D), f)]=E_f[E_{oﬀ} (A_2(D), f)]\n",
    "$$\n",
    "\n",
    "You have now proved that in a noiseless setting, for a fixed $D$, if all possible $f$ are equally likely, any two deterministic algorithms are equivalent in terms of the expected off training set error. Similar results can be proved fr more general settings."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)由题设知$E_{oﬀ} (h, f)=\\frac 1 M\\sum_{m=1}^M[\\![(N+m)被2整除]\\!]$  \n",
    "我们知道$1$到$N$中被2整除的正整数有$[\\frac N 2]$个，$[]$为高斯函数，意思为向下取整\n",
    "因此\n",
    "$$\n",
    "E_{oﬀ} (h, f)=\\frac1 M[(1到N+M中被2整除的数的个数)-(1到N中被2整除的数的个数)]\n",
    "=\\frac1 M([\\frac {N+M}2]-[\\frac {N}2])\n",
    "$$\n",
    "\n",
    "(b)这题的意思是在训练集$D$上没有误差，在$\\{x_{N+1} , . . . , x_{N+M}\\}$上的取值就任意了，每个点有两种取值，所以一共有$2^M$种可以拟合的$f$\n",
    "\n",
    "(c)一共有$M$个点，有$k$个点和目标函数不同，所以共有$C_M^k$种\n",
    "\n",
    "(d)题目的假设意思应该是每个在训练集无噪声的$f$出现的概率是一样的，所以这些$f$在测试集上每个点出现错误的概率应该是一样的，那么由(c)以及(d)可知\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E_f[E_{oﬀ} (h, f)]&=\\sum_{k=0}^M\\frac k M \\frac {C_M^k}{2^M}\n",
    "\\\\&=\\frac {\\sum_{k=0}^MkC_M^k}{M2^M}\n",
    "\\\\&=\\frac {\\sum_{k=1}^M MC_{M-1}^{k-1}}{M2^M}\n",
    "\\\\&=\\frac {2^{M-1}}{2^M}\n",
    "\\\\&=\\frac 1 2\n",
    "\\end{aligned}\n",
    "$$\n",
    "注意这里用到了$kC_n^k=nC_{n-1}^{k-1}$\n",
    "\n",
    "(e)由(d)直接推出"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 1.11 (Page 38)\n",
    "The matrix which tabulates the cost of various errors for\n",
    "the CIA and Supermarket applications in Example 1.1 is called a risk or loss\n",
    "matrix.\n",
    "\n",
    "For the two risk matrices in Example 1.1, explicitly write down the in sample error $E_{in}$ that one should minimize to obtain $g$.This in-sample error should weight the different types of errors based on the risk matrix. [Hint: Consider $y_n = +1$ and $y_n = - 1$ separately.]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![](https://github.com/Doraemonzzz/markdown-photo/blob/learning-from-data/C1P11.png?raw=true)\n",
    "\n",
    "这里假设有$N$个样本\n",
    "\n",
    "对于Suptermarket：\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E_{in}&=\\frac 1N \\sum_{i=1}^{n}(10\\times[\\![h(x_n)=-1,  f(x_n)=1]\\!]+1\\times[\\![h(x_n)=1,  f(x_n)=-1]\\!])\n",
    "\\end{aligned}\n",
    "$$\n",
    "\n",
    "对于CIA：\n",
    "$$\n",
    "\\begin{aligned}\n",
    "E_{in}&=\\frac 1N \\sum_{i=1}^{n}(1\\times[\\![h(x_n)=-1,  f(x_n)=1]\\!]+1000\\times[\\![h(x_n)=1,  f(x_n)=-1]\\!])\n",
    "\\end{aligned}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Problem 1.12 (Page 38)\n",
    "This problem investigates how changing the error measure can change the result of the learning process. You have $N$ data points $y_1\\le· · · \\le y_N$ and wish to estimate a 'representative' value.\n",
    "\n",
    "(a) If your algorithm is to find the hypothesis h that minimizes the in sample\n",
    "sum of squared deviations,\n",
    "$$\n",
    "E_{in}(h) = \\sum_{n=1}^N (h - y_n)^2,\n",
    "$$\n",
    "then show that your estimate will be the in sample mean,\n",
    "$$\n",
    "h_{mean} = \\sum_{n=1}^Ny_n\n",
    "$$\n",
    "\n",
    "(b) If your algorithm is to find the hypothesis $h$ that minimizes the in sample\n",
    "sum of absolute deviations,\n",
    "$$\n",
    "E_{in}(h) = \\sum_{n=1}^N|h - y_n| ,\n",
    "$$\n",
    "then show that your estimate will be the in sample median h_{med} . which is any value for which half the data points are at most h_{med} and half the data points are at least $h_{med}$·\n",
    "\n",
    "(c) Suppose $y_N$ is perturbed to $y_N + \\epsilon$, where $\\epsilon \\to \\infty$. So, the single data point $y_N$ becomes an outlier. What happens to your two estimators $h_{mean}$ and $h_{med}$?"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(a)关于$h$求导可得\n",
    "$$\n",
    "E_{in}^{'}(h)=2\\sum_{n=1}^N (h - y_n)\n",
    "\\\\E_{in}^{''}(h)=2N>0\n",
    "$$\n",
    "所以$E_{in}(h)$在$E_{in}^{'}(h)=0$的取极小值，解得$h_{mean} =\\frac 1 N \\sum_{n=1}^Ny_n$\n",
    "\n",
    "(b)这题证明一个一般结论：  \n",
    "随机变量$x$的密度函数为$f(x)$,则使得$F(a)=\\int _{-\\infty}^{+\\infty}|x-a|f(x)dx$达到最小值的$a$满足$\\int _{-\\infty}^{a}f(x)dx=\\frac 1 2$，即$a$为该分布的中位数$x_{med}$。\n",
    "证明：\n",
    "首先\n",
    "$$\n",
    "F(a)=\\int _{-\\infty}^{a}(a-x)f(x)dx+\\int _{a}^{\\infty}(x-a)f(x)dx\n",
    "$$\n",
    "那么关于$a$求导得\n",
    "$$\n",
    "F^{'}(a)=\\int _{-\\infty}^{a}f(x)dx-\\int _{a}^{\\infty}f(x)dx\n",
    "\\\\F^{''}(a)=2f(a)\\ge0\n",
    "$$\n",
    "所以$F(a)$在$F^{'}(a)=0$处取最小值，即在$\\int _{-\\infty}^{a}f(x)dx=\\int _{a}^{\\infty}f(x)dx=\\frac 12$处取最小值。最后一步是由$\\int _{-\\infty}^{a}f(x)dx+\\int _{a}^{\\infty}f(x)dx=1$得到。  \n",
    "所以$F(a)$在$a=x_{med}$处取到最小值(离散分布同理可得)\n",
    "\n",
    "回到原题，现在构造一个分布，使得$P(y=y_i)=\\frac 1 N(i=1,2...N)$，所以\n",
    "$$\n",
    "F(h)=\\frac 1 NE_{in}(h) =\\frac 1N \\sum_{n=1}^N|h - y_n|\n",
    "$$\n",
    "因此由之前结论知道$E_{in}(h)$在$h=y_{med}$取最小值\n",
    "\n",
    "(c)当$y_N$被污染为 $y_N + \\epsilon,(\\epsilon \\to \\infty)$时，由定义可知$h_{mean}\\to \\infty$,而$y_{med}$为中位数，则不会有太大变化，因为元素的相对次序只有$y_N$变了"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
